CINXE.COM

Getting Started with Catalog Ingestion | Catalog

<!doctype html><!--[if IE 8]><html data-19ax5a9jf="dingo" lang="en_US" class="a-no-js a-lt-ie10 a-lt-ie9 a-ie8"><![endif]--><!--[if IE 9]><html data-19ax5a9jf="dingo" lang="en_US" class="a-no-js a-lt-ie10 a-ie9"><![endif]--><!--[if !(IE 8)&!(IE 9)]><!--><html data-19ax5a9jf="dingo" lang="en_US" class="a-no-js"><!--<![endif]--> <head><script>var aPageStart = (new Date()).getTime();</script><meta charset="utf-8"/> <link rel="stylesheet" href="https://images-na.ssl-images-amazon.com/images/I/11EIQ5IGqaL._RC|01e5ncglxyL.css,01lF2n-pPaL.css,41DLtM-IPiL.css,31iNSIr1kuL.css,011DCEwfbwL.css,013z33uKh2L.css,01R9dtRDQdL.css,01rhj7BIeEL.css,410iOIpxjqL.css,11TIuySqr6L.css,01ElnPiDxWL.css,114oHnH0QRL.css,01crd53+KxL.css,01IdKcBuAdL.css,01y-XAlI+2L.css,01RgENaJKWL.css,219sMS379pL.css,01oDR3IULNL.css,51CguxBmgsL.css,01XPHJk60-L.css,01lN1FNc-RL.css,21Z4Q-IpuWL.css,11MrAKjcAKL.css,21qHKSTSJCL.css,11Zh8bU-hoL.css,01CFUgsA-YL.css,31jsrAUX5KL.css,11WHSxzwhML.css,11MO3b1rxzL.css,11ylgxpE+pL.css,11b-GR26DVL.css,01j2JE3j7aL.css,11maZ3sCvAL.css,21+98GSaU1L.css,11TxiWYBNOL.css,01chhhuYckL.css,21Q7cg1AwNL.css,1128pDOWgAL.css,11mA7+zB7BL.css,01G+-woTSUL.css,01890+Vwk8L.css,01b3+vZ+YbL.css,01cbS3UK11L.css,21kdNu0AlvL.css,0116OOHSwvL.css_.css?AUIClients/AmazonUI#us.trident" /> <link rel="stylesheet" href="https://images-na.ssl-images-amazon.com/images/I/71cTjwDJRNL.css?AUIClients/DeXWebsiteAUIAssets" /> <meta charset="utf-8"> <title>Getting Started with Catalog Ingestion | Catalog </title> <meta name="description" content="Catalog ingestion is the process of submitting your media to Amazon so that it can be surfaced to users. You first define all the metadata about your media (movies, tv shows) in..."> <meta name="keywords" content="getting started with catalog, catalog integration tutorial"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <link rel="icon" type="image/x-icon" href="https://amzndevresources.com/jekyll/css/favicon.ico"> <!-- FontAwesome (GPL license) --> <link rel="stylesheet" type="text/css" href="https://amzndevresources.com/jekyll/css/font-awesome/css/font-awesome.min.css"> <meta name="google-site-verification" content="wfEDah_6uJe9Y7uIfLrVycd_efr8wQ9YO-fM_5MI5w0" /> <meta name="google-site-verification" content="Eu8BqTWMhRRdfCAdqUh2RYb3SjAiuFp4wmgTtGcteM0" /> <link rel="alternate" href="https://developer.amazon.com/docs/catalog/getting-started-catalog-ingestion.html" hreflang="en_US" /> <link rel="canonical" href="https://developer.amazon.com/docs/catalog/getting-started-catalog-ingestion.html" /> <meta name="google-site-verification" content="KHmp6TUPKc1gHlM9TuB842pcV7TxZVV6TgenZtsYoNY" /> <meta name="msvalidate.01" content="9761B379C1B64F587D71BA40337FDD07" /> <script language="JavaScript" type="text/javascript"> var digitalData ={ page:{ pageInfo: { pageInstanceID: "docs\/catalog\/getting\-started\-catalog\-ingestion.html", path: "\/docs\/catalog\/getting\-started\-catalog\-ingestion.html", pageID: "", pageTitle: "", pageType: "DeX", primaryCategory: "appstore", pageName: "", language: "en_US" } }, user:{ userID: "", ipAddress: "8.222.208.146" } }; var urlSplit = "\/docs\/catalog\/getting\-started\-catalog\-ingestion.html".split("/"); var trailingSlash = urlSplit.pop(); var pTitle = trailingSlash; if (trailingSlash == ""){ pTitle = urlSplit.pop() } if ("".indexOf("search") !== -1) { digitalData.page.pageInfo.searchResultsNum = ""; } if ("".indexOf("dex-home") !== -1){ digitalData.page.pageInfo.pageID = "Home"; digitalData.page.pageInfo.pageTitle = "Home"; digitalData.page.pageInfo.primaryCategory = "Home"; } else { digitalData.page.pageInfo.pageID = pTitle; pTitle = pTitle.replace(/(^|-)[a-z]/g,function(f){return f.toUpperCase();}); pTitle = pTitle.replace(/-/g, ''); digitalData.page.pageInfo.pageTitle = pTitle; var pCat = digitalData.page.pageInfo.primaryCategory; pCat = pCat.replace(/(^|-)[a-z]/g,function(f){return f.toUpperCase();}); pCat = pCat.replace(/-/g, ''); digitalData.page.pageInfo.primaryCategory = pCat; } var pageNameStr = "" + digitalData.page.pageInfo.primaryCategory; //Todo: add in logic for sub-categories when AOI is implemented. if (digitalData.page.pageInfo.pageTitle != null){ if (pageNameStr != ""){ pageNameStr += ":"; } pageNameStr += digitalData.page.pageInfo.pageTitle; } digitalData.page.pageInfo.pageName = pageNameStr; (function (w) { w.URLSearchParams = w.URLSearchParams || function (searchString) { var self = this; self.searchString = searchString; self.get = function (name) { var results = new RegExp('[\?&]' + name + '=([^&#]*)').exec(self.searchString); if (results == null) { return null; } else { return decodeURI(results[1]) || 0; } }; } })(window); </script> <script src="https://m.media-amazon.com/images/G/01/envImprovement/js/jquery/jquery-3.5.1.min.js" crossorigin="anonymous"></script> <script src="https://ds6yc8t7pnx74.cloudfront.net/content/dam/developer-portal/analytics/prod/launch-EN968f8a7401fc4ccea43ced61e7b0c2bb.min.js" async></script> <link rel="stylesheet" type="text/css" href="https://d20632htc2msyc.cloudfront.net/static/css/main.css" /> <script defer src="https://d20632htc2msyc.cloudfront.net/static/js/main.js"></script> <script type="text/javascript"> (function() { var didInit = false; function initMunchkin() { if(didInit === false) { didInit = true; Munchkin.init('365-EFI-026'); } } var s = document.createElement('script'); s.type = 'text/javascript'; s.async = true; s.src = '//munchkin.marketo.net/munchkin.js'; s.onreadystatechange = function() { if (this.readyState == 'complete' || this.readyState == 'loaded') { initMunchkin(); } }; s.onload = initMunchkin; document.getElementsByTagName('head')[0].appendChild(s); })(); </script> </head> <body class="a-m-us a-aui_72554-c a-aui_a11y_1_699934-c a-aui_a11y_4_835613-c a-aui_a11y_6_837773-c a-aui_a11y_sr_678508-c a-aui_killswitch_csa_logger_372963-c a-aui_pci_risk_banner_210084-c a-aui_preload_261698-c a-aui_rel_noreferrer_noopener_309527-c a-aui_template_weblab_cache_333406-c a-aui_tnr_v2_180836-c"><div id="a-page"><script type="a-state" data-a-state="{&quot;key&quot;:&quot;a-wlab-states&quot;}">{"AUI_A11Y_6_837773":"C","AUI_TNR_V2_180836":"C","AUI_PRELOAD_261698":"C","AUI_TEMPLATE_WEBLAB_CACHE_333406":"C","AUI_72554":"C","AUI_A11Y_1_699934":"C","AUI_A11Y_4_835613":"C","AUI_KILLSWITCH_CSA_LOGGER_372963":"C","AUI_A11Y_SR_678508":"C","AUI_REL_NOREFERRER_NOOPENER_309527":"C","AUI_PCI_RISK_BANNER_210084":"C"}</script> <link rel="stylesheet" type="text/css" href="https://m.media-amazon.com/images/G/01/Fonts/FontAwesome/css/font-awesome.min._V516135338_.css"> <header class='dpHeader dphThemedark'> <div class='dphTopBar clearfix'> <div class='dphLeft'> <div class='dphMenuToggle'> <i class='dphMenuIcon'></i> <i class='dphMenuBackIcon'></i> </div> <a class='dphLogo' href='/apps-and-games'> <img src="https://m.media-amazon.com/images/G/01/mobile-apps/dex/logos/amazonAppstoreLogoDarkBG1x_new.png" srcset="https://m.media-amazon.com/images/G/01/mobile-apps/dex/logos/amazonAppstoreLogoDarkBG1x_new.png 1x, https://m.media-amazon.com/images/G/01/mobile-apps/dex/logos/amazonAppstoreLogoDarkBG2x.png 2x" alt="Amazon Developer Logo"> </a> </div> <div class='dphRight'> <div class="dphSearchBarWrap"> <!-- Used in tech docs to hide side bar search results when we rollout new search --> <script type="text/javascript"> window.newSearch = true; </script> <div hidden style="display: none;" class="new-search-flag" data-val="enabled"></div> <div hidden style="display: none;" class="new-search-metadata"> {"settingsUrl":"https://ds6yc8t7pnx74.cloudfront.net/devportal-digital-assets/cf/developer-portal/getDeXSearchData"} </div> <div id="dex-search-header-bar"> </div> </div> <a href="/home.html" class='dphConsole dphLink'>Developer Console</a> <div class='dphUserInfo'> <a class="dphLink" href="/settings/console/registration?return_to=/docs/catalog/getting-started-catalog-ingestion.html">Sign In</a> </div> <style> #notification-counter { position: absolute; top: 2px; padding: 0 2px; min-width: 20px; background: #BF2727; color: white; font-size: 11px; border-radius: 3px; line-height: 20px; text-align: center; } #notification_click_icon { width: 32px; height: 32px; background-color: #31465f; text-align: center; line-height: 32px; border-radius: 50%; margin-right: 15px; color: white; font-weight: 300; cursor: pointer; } #notification-placeholder { position: absolute; top:45px; } #notification_flyout_iframe_id { display: none; position: absolute; width: 425px; border: none; transform: translate(-80%); transition: all 0.2s; } @media screen and (max-width: 992px) { #notification_click_icon { position: fixed; display: inline-block; right: 44px; } #notification_click_icon ~ .dphSearch.active { position: relative; z-index: 0; } #notification-placeholder { top:28px; } #notification-counter { top: -6px; } } @media screen and (max-width: 414px) { #notification_flyout_iframe_id { transform: none; right: -99px; width: 100vw; } #notification_click_icon ~ .dphSearch.active { position: relative; z-index: 0; } } </style> <div id='navFlyout?' class='dphFlyoutItem dphDevConsoleLinkTopBar dphButton'> <span class='dphConsole dphLink'>?</span> <div class='dphDropdownWrap'> <nav class='dphDropdown accrItem'> <div class='dpIconArrow accrHandle'></div> <ul class='dphDropdownList'> <li class='dphdItem'><a href='/support/'>Support</a></li> <li class='dphdItem'><a href='/documentation/'>Docs</a></li> <li class='dphdItem'><a href='/support/contact-us'>Contact Us</a></li> <li class='dphdItem'><a href='/support/cases'>My Appstore Cases</a></li> </ul> </nav> </div> </div> </div> </div> <div class='dphNavigation accordion' data-accr_active_width='327'> <div class='dphnWrap'> <div class='dphUserInfo'> <a class="dphLink" href="/settings/console/registration?return_to=/docs/catalog/getting-started-catalog-ingestion.html">Sign In</a> </div> <a href="/home.html" class='dphConsole dphLink'>Developer Console</a> <nav class="dpPrimaryNav"> <ul class="dppnItems"> <li class="dppnItem accrItem"> <span class="dppnLink"> Devices </span> <div class='dpIconArrow accrHandle'></div> <div class='dppnFlyoutWrap'> <div class='dppnSecondaryNavWrap'> <ul class="dppnFlyout dppnSecondaryNav"> <li class="dppnfItem accrItem"> <span class="dppnfLink"> <span class="dppnfTitle">Fire TV</span> <span class="dppnfSubtitle"></span> </span> <div class='dpIconArrow accrHandle'></div> <div class='dppnLevel3NavWrap'> <ul class="dppnFlyout dppnLevel3Nav"> <li class="dppnfItem "> <a href="/apps-and-games/fire-tv" class="dppnfLink"> <span class="dppnfTitle">About</span> <span class="dppnfSubtitle"></span> </a> </li> <li class="dppnfItem "> <a href="/docs/fire-tv/getting-started-developing-apps-and-games.html" class="dppnfLink"> <span class="dppnfTitle">Get started</span> <span class="dppnfSubtitle"></span> </a> </li> <li class="dppnfItem "> <a href="/docs/fire-tv/device-specifications.html" class="dppnfLink"> <span class="dppnfTitle">Device specs</span> <span class="dppnfSubtitle"></span> </a> </li> <li class="dppnfItem "> <a href="/docs/fire-tv/device-specifications-comparison-table.html" class="dppnfLink"> <span class="dppnfTitle">Compare devices</span> <span class="dppnfSubtitle"></span> </a> </li> <li class="dppnfItem "> <a href="/docs/fire-tv/fire-os-overview.html" class="dppnfLink"> <span class="dppnfTitle">Fire OS for TV</span> <span class="dppnfSubtitle"></span> </a> </li> </ul> </div> </li> <li class="dppnfItem accrItem"> <span class="dppnfLink"> <span class="dppnfTitle">Fire tablets</span> <span class="dppnfSubtitle"></span> </span> <div class='dpIconArrow accrHandle'></div> <div class='dppnLevel3NavWrap'> <ul class="dppnFlyout dppnLevel3Nav"> <li class="dppnfItem "> <a href="/apps-and-games/fire-tablets" class="dppnfLink"> <span class="dppnfTitle">About</span> <span class="dppnfSubtitle"></span> </a> </li> <li class="dppnfItem "> <a href="/docs/fire-tablets/ft-get-started.html" class="dppnfLink"> <span class="dppnfTitle">Get started</span> <span class="dppnfSubtitle"></span> </a> </li> <li class="dppnfItem "> <a href="/docs/fire-tablets/ft-device-specifications.html" class="dppnfLink"> <span class="dppnfTitle">Device specs</span> <span class="dppnfSubtitle"></span> </a> </li> <li class="dppnfItem "> <a href="/docs/fire-tablets/fire-os-8.html" class="dppnfLink"> <span class="dppnfTitle">Fire OS for tablets</span> <span class="dppnfSubtitle"></span> </a> </li> </ul> </div> </li> </ul> </div> </div> </li> <li class="dppnItem accrItem"> <span class="dppnLink"> Build </span> <div class='dpIconArrow accrHandle'></div> <div class='dppnFlyoutWrap'> <div class='dppnSecondaryNavWrap'> <ul class="dppnFlyout dppnSecondaryNav"> <li class="dppnfItem accrItem"> <span class="dppnfLink"> <span class="dppnfTitle">Fire TV apps</span> <span class="dppnfSubtitle"></span> </span> <div class='dpIconArrow accrHandle'></div> <div class='dppnLevel3NavWrap'> <ul class="dppnFlyout dppnLevel3Nav"> <li class="dppnfItem "> <a href="/docs/fire-tv/getting-started-developing-apps-and-games.html" class="dppnfLink"> <span class="dppnfTitle">Get started</span> <span class="dppnfSubtitle"></span> </a> </li> <li class="dppnfItem "> <a href="/docs/fire-tv/design-and-user-experience-guidelines.html" class="dppnfLink"> <span class="dppnfTitle">UX guidelines</span> <span class="dppnfSubtitle"></span> </a> </li> <li class="dppnfItem "> <a href="/docs/fire-tv/remote-input.html" class="dppnfLink"> <span class="dppnfTitle">Remote control input</span> <span class="dppnfSubtitle"></span> </a> </li> <li class="dppnfItem "> <a href="/docs/fire-tv/connecting-adb-to-device.html" class="dppnfLink"> <span class="dppnfTitle">Connect through Android Debug Bridge</span> <span class="dppnfSubtitle"></span> </a> </li> <li class="dppnfItem "> <a href="/docs/fire-tv/self-service-advertising.html" class="dppnfLink"> <span class="dppnfTitle">Promote your TV app</span> <span class="dppnfSubtitle"></span> </a> </li> </ul> </div> </li> <li class="dppnfItem accrItem"> <span class="dppnfLink"> <span class="dppnfTitle">Fire tablet apps</span> <span class="dppnfSubtitle"></span> </span> <div class='dpIconArrow accrHandle'></div> <div class='dppnLevel3NavWrap'> <ul class="dppnFlyout dppnLevel3Nav"> <li class="dppnfItem "> <a href="/docs/fire-tablets/ft-get-started.html" class="dppnfLink"> <span class="dppnfTitle">Get started</span> <span class="dppnfSubtitle"></span> </a> </li> <li class="dppnfItem "> <a href="/docs/fire-tablets/ft-ux-specifications.html" class="dppnfLink"> <span class="dppnfTitle">UX guidelines</span> <span class="dppnfSubtitle"></span> </a> </li> <li class="dppnfItem "> <a href="/docs/fire-tablets/connecting-adb-to-device.html" class="dppnfLink"> <span class="dppnfTitle">Connect through Android Debug Bridge</span> <span class="dppnfSubtitle"></span> </a> </li> </ul> </div> </li> <li class="dppnfItem accrItem"> <a href="/docs/apps-and-games/sdk-downloads.html" class="dppnfLink"> <span class="dppnfTitle">SDKs</span> <span class="dppnfSubtitle"></span> </a> </li> <li class="dppnfItem accrItem"> <a href="/docs/app-submission/migrate-existing-app.html" class="dppnfLink"> <span class="dppnfTitle">Porting Android apps</span> <span class="dppnfSubtitle"></span> </a> </li> <li class="dppnfItem accrItem"> <a href="/apps-and-games/services-and-apis/monetization" class="dppnfLink"> <span class="dppnfTitle">Monetizing apps</span> <span class="dppnfSubtitle"></span> </a> </li> <li class="dppnfItem accrItem"> <a href="/apps-and-games/services-and-apis" class="dppnfLink"> <span class="dppnfTitle">Services & APIs</span> <span class="dppnfSubtitle"></span> </a> </li> <li class="dppnfItem accrItem"> <a href="/apps-and-games/blogs/tag.best-practices" class="dppnfLink"> <span class="dppnfTitle">Best practices</span> <span class="dppnfSubtitle"></span> </a> </li> </ul> </div> </div> </li> <li class="dppnItem accrItem"> <span class="dppnLink"> Test </span> <div class='dpIconArrow accrHandle'></div> <div class='dppnFlyoutWrap'> <div class='dppnSecondaryNavWrap'> <ul class="dppnFlyout dppnSecondaryNav"> <li class="dppnfItem accrItem"> <a href="/docs/app-testing/test-criteria.html" class="dppnfLink"> <span class="dppnfTitle">App testing criteria</span> <span class="dppnfSubtitle"></span> </a> </li> <li class="dppnfItem accrItem"> <a href="/docs/app-testing/live-app-testing-getting-started.html" class="dppnfLink"> <span class="dppnfTitle">Live App Testing</span> <span class="dppnfSubtitle"></span> </a> </li> <li class="dppnfItem accrItem"> <a href="/docs/in-app-purchasing/iap-testing-overview.html" class="dppnfLink"> <span class="dppnfTitle">In-app purchasing testing</span> <span class="dppnfSubtitle"></span> </a> </li> <li class="dppnfItem accrItem"> <span class="dppnfLink"> <span class="dppnfTitle">Quality performance</span> <span class="dppnfSubtitle"></span> </span> <div class='dpIconArrow accrHandle'></div> <div class='dppnLevel3NavWrap'> <ul class="dppnFlyout dppnLevel3Nav"> <li class="dppnfItem "> <a href="/docs/app-testing/test-criteria.html#test-criteria-group-2-key-app-performance-indicators" class="dppnfLink"> <span class="dppnfTitle">Key performance indicators</span> <span class="dppnfSubtitle"></span> </a> </li> <li class="dppnfItem "> <a href="/docs/app-testing/app-performance-scripts.html" class="dppnfLink"> <span class="dppnfTitle">App performance scripts</span> <span class="dppnfSubtitle"></span> </a> </li> </ul> </div> </li> </ul> </div> </div> </li> <li class="dppnItem accrItem"> <span class="dppnLink"> Publish </span> <div class='dpIconArrow accrHandle'></div> <div class='dppnFlyoutWrap'> <div class='dppnSecondaryNavWrap'> <ul class="dppnFlyout dppnSecondaryNav"> <li class="dppnfItem accrItem"> <a href="/docs/app-submission/understanding-submission.html" class="dppnfLink"> <span class="dppnfTitle">Publishing overview</span> <span class="dppnfSubtitle"></span> </a> </li> <li class="dppnfItem accrItem"> <a href="/docs/policy-center/understanding-content-policy.html" class="dppnfLink"> <span class="dppnfTitle">App content policies</span> <span class="dppnfSubtitle"></span> </a> </li> <li class="dppnfItem accrItem"> <a href="/docs/reports-promo/UI-reports-dashboard.html" class="dppnfLink"> <span class="dppnfTitle">Revenue reporting</span> <span class="dppnfSubtitle"></span> </a> </li> <li class="dppnfItem accrItem"> <a href="/docs/app-submission/manage-account-and-permissions.html" class="dppnfLink"> <span class="dppnfTitle">Developer account management</span> <span class="dppnfSubtitle"></span> </a> </li> </ul> </div> </div> </li> <li class="dppnItem accrItem"> <span class="dppnLink"> Connect </span> <div class='dpIconArrow accrHandle'></div> <div class='dppnFlyoutWrap'> <div class='dppnSecondaryNavWrap'> <ul class="dppnFlyout dppnSecondaryNav"> <li class="dppnfItem accrItem"> <a href="/apps-and-games/blogs" class="dppnfLink"> <span class="dppnfTitle">Blogs</span> <span class="dppnfSubtitle"></span> </a> </li> <li class="dppnfItem accrItem"> <a href="/apps-and-games/events" class="dppnfLink"> <span class="dppnfTitle">Events</span> <span class="dppnfSubtitle"></span> </a> </li> <li class="dppnfItem accrItem"> <a href="https://community.amazondeveloper.com/" class="dppnfLink"> <span class="dppnfTitle">Appstore Developer Community</span> <span class="dppnfSubtitle"></span> </a> </li> <li class="dppnfItem accrItem"> <a href="/docs/apps-and-games/release-notes.html" class="dppnfLink"> <span class="dppnfTitle">Release notes</span> <span class="dppnfSubtitle"></span> </a> </li> </ul> </div> </div> </li> <li class="dppnItem accrItem"> <a href="/apps-and-games/documentation" class="dppnLink"> Docs </a> </li> </ul> </nav> <nav class="dpPrimaryNav dphDevConsoleLinkNavBar"> <ul class="dppnItems"> <li class="dppnItem accrItem"> <span class='dppnLink'>Support</span> <div class="dpIconArrow accrHandle"></div> <div class="dppnFlyoutWrap"> <div class="dppnSecondaryNavWrap"> <ul class='dppnFlyout dppnSecondaryNav'> <li class='dppnfItem accrItem'><a class="dppnfLink" href='/support/'><span class="dppnfTitle">Support</span></a></li> <li class='dppnfItem accrItem'><a class="dppnfLink" href='/documentation/'><span class="dppnfTitle">Docs</span></a></li> <li class='dppnfItem accrItem'><a class="dppnfLink" href='/support/contact-us'><span class="dppnfTitle">Contact Us</span></a></li> <li class='dppnfItem accrItem'><a class="dppnfLink" href='/support/cases'><span class="dppnfTitle">My Appstore Cases</span></a></li> </ul> </div> </div> </li> </ul> </nav> </div> </div> </header> <div id='dpHeaderPlaceholder'></div> <script> (function(){ //Set placeholder height as soon as possible to eliminate page jump "use strict"; var setHeaderPlaceholderHeight = function(header){ var placeholder = document.getElementById('dpHeaderPlaceholder'); var headerHeight = header[0].offsetHeight + "px"; placeholder.style.height = headerHeight; } var checkForHeader = function(){ var header = document.querySelectorAll('.dpHeader'); if(header.length){ setHeaderPlaceholderHeight(header); window.clearInterval(checkForHeaderInterval); } } var checkForHeaderInterval = window.setInterval(checkForHeader, 10); checkForHeader(); //Run once immediately }()); </script> <script> (function(a,b,c,d){if((a=a.AmazonUIPageJS||a.P)&&a.when&&a.register)throw Error("A copy of P has already been loaded on this page.");})(window,document,Date);(function(a,b,c,d){"use strict";a._pSetI=function(){return null}})(window,document,Date);(function(a,c,d,e){"use strict";a._sw=function(){var b;return function(a,c,d,e,f,g,h,k,l,m){b||(b=!0)}}()})(window,document,Date);(function(c,e,I,B){"use strict";c._pd=function(){var a,u;return function(C,f,h,k,b,D,v,E,F){function w(d){try{return d()}catch(J){return!1}}function l(){if(m){var d={w:c.innerWidth||b.clientWidth,h:c.innerHeight||b.clientHeight};5<Math.abs(d.w-q.w)||50<d.h-q.h?(q=d,n=4,(d=a.mobile||a.tablet?450<d.w&&d.w>d.h:1250<=d.w)?k(b,"a-ws"):b.className=v(b,"a-ws")):0<n&&(n--,x=setTimeout(l,16))}}function G(d){(m=d===B?!m:!!d)&&l()}function H(){return m}if(!u){u=!0;var r=function(){var d=["O","ms","Moz","Webkit"], c=e.createElement("div");return{testGradients:function(){return!0},test:function(a){var b=a.charAt(0).toUpperCase()+a.substr(1);a=(d.join(b+" ")+b+" "+a).split(" ");for(b=a.length;b--;)if(""===c.style[a[b]])return!0;return!1},testTransform3d:function(){return!1}}}(),y=b.className,z=/(^| )a-mobile( |$)/.test(y),A=/(^| )a-tablet( |$)/.test(y);a={audio:function(){return!!e.createElement("audio").canPlayType},video:function(){return!!e.createElement("video").canPlayType},canvas:function(){return!!e.createElement("canvas").getContext}, svg:function(){return!!e.createElementNS&&!!e.createElementNS("http://www.w3.org/2000/svg","svg").createSVGRect},offline:function(){return navigator.hasOwnProperty&&navigator.hasOwnProperty("onLine")&&navigator.onLine},dragDrop:function(){return"draggable"in e.createElement("span")},geolocation:function(){return!!navigator.geolocation},history:function(){return!(!c.history||!c.history.pushState)},webworker:function(){return!!c.Worker},autofocus:function(){return"autofocus"in e.createElement("input")}, inputPlaceholder:function(){return"placeholder"in e.createElement("input")},textareaPlaceholder:function(){return"placeholder"in e.createElement("textarea")},localStorage:function(){return"localStorage"in c&&null!==c.localStorage},orientation:function(){return"orientation"in c},touch:function(){return"ontouchend"in e},gradients:function(){return r.testGradients()},hires:function(){var a=c.devicePixelRatio&&1.5<=c.devicePixelRatio||c.matchMedia&&c.matchMedia("(min-resolution:144dpi)").matches;E("hiRes"+ (z?"Mobile":A?"Tablet":"Desktop"),a?1:0);return a},transform3d:function(){return r.testTransform3d()},touchScrolling:function(){return f(/Windowshop|android|OS ([5-9]|[1-9][0-9]+)(_[0-9]{1,2})+ like Mac OS X|SOFTWARE=([5-9]|[1-9][0-9]+)(.[0-9]{1,2})+.*DEVICE=iPhone|Chrome|Silk|Firefox|Trident.+?; Touch/i)},ios:function(){return f(/OS [1-9][0-9]*(_[0-9]*)+ like Mac OS X/i)&&!f(/trident|Edge/i)},android:function(){return f(/android.([1-9]|[L-Z])/i)&&!f(/trident|Edge/i)},mobile:function(){return z}, tablet:function(){return A},rtl:function(){return"rtl"===b.dir}};for(var g in a)a.hasOwnProperty(g)&&(a[g]=w(a[g]));for(var t="textShadow textStroke boxShadow borderRadius borderImage opacity transform transition".split(" "),p=0;p<t.length;p++)a[t[p]]=w(function(){return r.test(t[p])});var m=!0,x=0,q={w:0,h:0},n=4;l();h(c,"resize",function(){clearTimeout(x);n=4;l()});b.className=v(b,"a-no-js");k(b,"a-js");!f(/OS [1-8](_[0-9]*)+ like Mac OS X/i)||c.navigator.standalone||f(/safari/i)||k(b,"a-ember"); h=[];for(g in a)a.hasOwnProperty(g)&&a[g]&&h.push("a-"+g.replace(/([A-Z])/g,function(a){return"-"+a.toLowerCase()}));k(b,h.join(" "));b.setAttribute("data-aui-build-date",F);C.register("p-detect",function(){return{capabilities:a,localStorage:a.localStorage&&D,toggleResponsiveGrid:G,responsiveGridEnabled:H}});return a||{}}}}()})(window,document,Date);(function(g,l,C,D){function E(a){n&&n.tag&&n.tag(p(":","aui",a))}function m(a,b){n&&n.count&&n.count("aui:"+a,0===b?0:b||(n.count("aui:"+a)||0)+1)}function F(a){try{return a.test(navigator.userAgent)}catch(b){return!1}}function G(a){return"function"===typeof a}function u(a,b,c){a.addEventListener?a.addEventListener(b,c,!1):a.attachEvent&&a.attachEvent("on"+b,c)}function p(a,b,c,f){b=b&&c?b+a+c:b||c;return f?p(a,b,f):b}function y(a,b,c){try{Object.defineProperty(a,b,{value:c,writable:!1})}catch(f){a[b]= c}return c}function O(a,b){a.className=P(a,b)+" "+b}function P(a,b){return(" "+a.className+" ").split(" "+b+" ").join(" ").replace(/^ | $/g,"")}function ca(a,b,c){var f=c=a.length,e=function(){f--||(H.push(b),I||(q?q.set(z):setTimeout(z,0),I=!0))};for(e();c--;)Q[a[c]]?e():(v[a[c]]=v[a[c]]||[]).push(e)}function da(a,b,c,f,e){var d=l.createElement(a?"script":"link");u(d,"error",f);e&&u(d,"load",e);a?(d.type="text/javascript",d.async=!0,c&&/AUIClients|images[/]I/.test(b)&&d.setAttribute("crossorigin", "anonymous"),d.src=b):(d.rel="stylesheet",d.href=b);l.getElementsByTagName("head")[0].appendChild(d)}function R(a,b){return function(c,f){function e(){da(b,c,d,function(b){J?m("resource_unload"):d?(d=!1,m("resource_retry"),e()):(m("resource_error"),a.log("Asset failed to load: "+c));b&&b.stopPropagation?b.stopPropagation():g.event&&(g.event.cancelBubble=!0)},f)}if(S[c])return!1;S[c]=!0;m("resource_count");var d=!0;return!e()}}function ea(a,b,c){for(var f={name:a,guard:function(c){return b.guardFatal(a, c)},guardTime:function(a){return b.guardTime(a)},logError:function(c,d,e){b.logError(c,d,e,a)}},e=[],d=0;d<c.length;d++)A.hasOwnProperty(c[d])&&(e[d]=K.hasOwnProperty(c[d])?K[c[d]](A[c[d]],f):A[c[d]]);return e}function w(a,b,c,f,e){return function(d,k){function n(){var a=null;f?a=k:G(k)&&(q.start=r(),a=k.apply(g,ea(d,h,l)),q.end=r());if(b){A[d]=a;a=d;for(Q[a]=!0;(v[a]||[]).length;)v[a].shift()();delete v[a]}q.done=!0}var h=e||this;G(d)&&(k=d,d=D);b&&(d=d?d.replace(T,""):"__NONAME__",L.hasOwnProperty(d)&& h.error(p(", reregistered by ",p(" by ",d+" already registered",L[d]),h.attribution),d),L[d]=h.attribution);for(var l=[],m=0;m<a.length;m++)l[m]=a[m].replace(T,"");var q=x[d||"anon"+ ++fa]={depend:l,registered:r(),namespace:h.namespace};d&&ha.hasOwnProperty(d);c?n():ca(l,h.guardFatal(d,n),d);return{decorate:function(a){K[d]=h.guardFatal(d,a)}}}}function U(a){return function(){var b=Array.prototype.slice.call(arguments);return{execute:w(b,!1,a,!1,this),register:w(b,!0,a,!1,this)}}}function M(a,b){return function(c, f){f||(f=c,c=D);var e=this.attribution;return function(){h.push(b||{attribution:e,name:c,logLevel:a});var d=f.apply(this,arguments);h.pop();return d}}}function B(a,b){this.load={js:R(this,!0),css:R(this)};y(this,"namespace",b);y(this,"attribution",a)}function V(){l.body?k.trigger("a-bodyBegin"):setTimeout(V,20)}"use strict";var t=C.now=C.now||function(){return+new C},r=function(a){return a&&a.now?a.now.bind(a):t}(g.performance),ia=r(),ha={},n=g.ue;E();E("aui_build_date:3.24.1-2024-10-06");var W={getItem:function(a){try{return g.localStorage.getItem(a)}catch(b){}}, setItem:function(a,b){try{return g.localStorage.setItem(a,b)}catch(c){}}},q=g._pSetI(),H=[],ja=[],I=!1,ka=navigator.scheduling&&"function"===typeof navigator.scheduling.isInputPending;var z=function(){for(var a=q?q.set(z):setTimeout(z,0),b=t();ja.length||H.length;)if(H.shift()(),q&&ka){if(150<t()-b&&!navigator.scheduling.isInputPending()||50<t()-b&&navigator.scheduling.isInputPending())return}else if(50<t()-b)return;q?q.clear(a):clearTimeout(a);I=!1};var Q={},v={},S={},J=!1;u(g,"beforeunload",function(){J= !0;setTimeout(function(){J=!1},1E4)});var T=/^prv:/,L={},A={},K={},x={},fa=0,X=String.fromCharCode(92),h=[],Y=!0,Z=g.onerror;g.onerror=function(a,b,c,f,e){e&&"object"===typeof e||(e=Error(a,b,c),e.columnNumber=f,e.stack=b||c||f?p(X,e.message,"at "+p(":",b,c,f)):D);var d=h.pop()||{};e.attribution=p(":",e.attribution||d.attribution,d.name);e.logLevel=d.logLevel;e.attribution&&console&&console.log&&console.log([e.logLevel||"ERROR",a,"thrown by",e.attribution].join(" "));h=[];Z&&(d=[].slice.call(arguments), d[4]=e,Z.apply(g,d))};B.prototype={logError:function(a,b,c,f){b={message:b,logLevel:c||"ERROR",attribution:p(":",this.attribution,f)};if(g.ueLogError)return g.ueLogError(a||b,a?b:null),!0;console&&console.error&&(console.log(b),console.error(a));return!1},error:function(a,b,c,f){a=Error(p(":",f,a,c));a.attribution=p(":",this.attribution,b);throw a;},guardError:M(),guardFatal:M("FATAL"),guardCurrent:function(a){var b=h[h.length-1];return b?M(b.logLevel,b).call(this,a):a},guardTime:function(a){var b= h[h.length-1],c=b&&b.name;return c&&c in x?function(){var b=r(),e=a.apply(this,arguments);x[c].async=(x[c].async||0)+r()-b;return e}:a},log:function(a,b,c){return this.logError(null,a,b,c)},declare:w([],!0,!0,!0),register:w([],!0),execute:w([]),AUI_BUILD_DATE:"3.24.1-2024-10-06",when:U(),now:U(!0),trigger:function(a,b,c){var f=t();this.declare(a,{data:b,pageElapsedTime:f-(g.aPageStart||NaN),triggerTime:f});c&&c.instrument&&N.when("prv:a-logTrigger").execute(function(b){b(a)})},handleTriggers:function(){this.log("handleTriggers deprecated")}, attributeErrors:function(a){return new B(a)},_namespace:function(a,b){return new B(a,b)},setPriority:function(a){Y?Y=!1:this.log("setPriority only accept the first call.")}};var k=y(g,"AmazonUIPageJS",new B);var N=k._namespace("PageJS","AmazonUI");N.declare("prv:p-debug",x);k.declare("p-recorder-events",[]);k.declare("p-recorder-stop",function(){});y(g,"P",k);V();if(l.addEventListener){var aa;l.addEventListener("DOMContentLoaded",aa=function(){k.trigger("a-domready");l.removeEventListener("DOMContentLoaded", aa,!1)},!1)}var ba=l.documentElement,la=g._pd(k,F,u,O,ba,W,P,m,"3.24.1-2024-10-06");F(/UCBrowser/i)||la.localStorage&&O(ba,W.getItem("a-font-class"));k.declare("a-event-revised-handling",!1);g._sw(N,p,F,X,m,n,E,G,u,k);k.declare("a-fix-event-off",!1);m("pagejs:pkgExecTime",r()-ia)})(window,document,Date); (window.AmazonUIPageJS ? AmazonUIPageJS : P).load.js('https://images-na.ssl-images-amazon.com/images/I/61ZS63EQSsL._RC|11Y+5x+kkTL.js,51-UZWCmY3L.js,11yKORv-GTL.js,11na7Dl1tFL.js,21uGjv2MRDL.js,01VRMV3FBdL.js,21BJeD9yjcL.js,01cS+tLhj4L.js,11rRjDLdAVL.js,51UOrPXYGsL.js,11YA5PIFcPL.js,11UNP9ncXuL.js,11qGWmpSUoL.js,11EWRk6r74L.js,21paGe30x-L.js,01490L6yBnL.js,51Xt+PG12aL.js,01JYHc2oIlL.js,31nfKXylf6L.js,01ezj5Rkz1L.js,11bEz2VIYrL.js,31o2NGTXThL.js,01rpauTep4L.js,01RMmNcPMuL.js_.js?AUIClients/AmazonUI#trident'); (window.AmazonUIPageJS ? AmazonUIPageJS : P).load.js('https://images-na.ssl-images-amazon.com/images/I/616qGtYUw7L.js?AUIClients/DeXWebsiteAUIAssets'); </script> <div class="content-section"> <div class="docs"> <!-- jQuery (MIT license)--> <script src="https://amzndevresources.com/jekyll/js/jquery-3.6.0.min.js"></script> <!-- Bootstrap 4.4 css --> <link rel="stylesheet" href="https://amzndevresources.com/jekyll/css/bootstrap4.css"> <link rel="stylesheet" href="https://amzndevresources.com/jekyll/css/styleoverrides.css"> <link rel="stylesheet" href="https://amzndevresources.com/jekyll/css/popovers.css"> <!-- Navgoco --> <script src="https://amzndevresources.com/jekyll/js/jquery.navgoco.min.js"></script> <!-- jQuery cookie (MIT license)--> <script type="text/javascript" src="https://amzndevresources.com/jekyll/js/jquery.cookie.js"></script> <!-- Bootstrap (MIT license)--> <script src="https://amzndevresources.com/jekyll/js/bootstrap.4.4.1.bundle.min.js"></script> <!-- Anchor JS (MIT license)--> <script src="https://amzndevresources.com/jekyll/js/anchor.min.js"></script> <!-- Initialization scripts --> <script src="https://amzndevresources.com/jekyll/js/initialization_scripts.js"></script> <!-- Tech doc css fixes now incorporated into stylesheet --> <div class="container"> <script> function activateContentBasedOnHash() { const currentHash = window.location.hash.substring(1); if (currentHash) { const contentElement = document.getElementById(currentHash); if (contentElement) { activateTabAndContent(contentElement); } } } function activateTabAndContent(contentElement) { const tabSection = contentElement.closest('.tab-pane'); if (tabSection) { const parentTabLink = document.querySelector(`a[href='#${tabSection.id}']`); if (parentTabLink) { const parentNavTabs = parentTabLink.closest('.nav-tabs'); if (parentNavTabs) { parentNavTabs.querySelectorAll('.nav-link').forEach(link => { link.classList.remove('active', 'show'); }); parentTabLink.classList.add('active', 'show'); } const parentTabContent = tabSection.closest('.tab-content'); if (parentTabContent) { parentTabContent.querySelectorAll('.tab-pane').forEach(tab => { tab.classList.remove('active', 'show'); }); tabSection.classList.add('active', 'show'); } } } } function scrollToHashWithOffset() { const tabHash = window.location.hash; const targetTabLink = document.querySelector(`.nav-tabs a[href="${tabHash}"]`); if (targetTabLink) { const header = document.querySelector('.dpHeader'); const totalHeaderHeight = header ? header.offsetHeight + 80 : 80; const targetTabElement = document.querySelector(tabHash); if (targetTabElement) { const targetTabPosition = targetTabElement.offsetTop; window.scrollTo({ top: targetTabPosition - totalHeaderHeight, behavior: 'smooth' }); } } } function handleClick(event) { event.preventDefault(); const link = event.currentTarget; const hash = link.getAttribute('href').substring(1); const contentElement = document.getElementById(hash); if (contentElement) { activateTabAndContent(contentElement); scrollToHashWithOffset(); } } document.addEventListener('DOMContentLoaded', () => { setTimeout(() => { activateContentBasedOnHash(); scrollToHashWithOffset(); }, 10); document.querySelectorAll('a[href^="#"]').forEach(link => { if (!link.classList.contains('nav-link')) { link.addEventListener('click', handleClick); } }); }); </script> <!-- sidebar --> <div id="sidebar"> <!-- sidebar_hide_weblab --> <div class="mydocsidebar"> <div id="search-searchbar"></div> <script src="https://amzndevresources.com/alexa/jekyll/js/new-nav/CoveoJsSearch.min.js"></script> <link rel="stylesheet" href="https://amzndevresources.com/alexa/jekyll/js/new-nav/CoveoFullSearch.css"> <link rel="stylesheet" href="https://amzndevresources.com/jekyll/css/search.css"> <script> if (!window.newSearch) { document.addEventListener("DOMContentLoaded", function () { const searchBoxRoot = document.getElementById("searchbox"); const organizationId = "amazoncomproduction9q1by2xb"; const accessToken = "xx42d66989-6d5b-4bd4-bc36-d3b3a04aa40f"; Coveo.SearchEndpoint.configureCloudV2Endpoint(organizationId, accessToken); Coveo.initSearchbox(searchBoxRoot, "https://developer.amazon.com/docs/appstore/search.html"); }); } </script> <div id="searchbox" class="CoveoSearchInterface" data-enable-history="true" data-results-per-page="80" data-excerpt-length="120" data-enable-duplicate-filtering="true" data-pipeline="AppstoreTechDocs" style="display:none"> <script> document.addEventListener("DOMContentLoaded", function () { let root = document.querySelector("#searchbox"); // event handler to group results by “source” Coveo.$$(root).on("preprocessResults", function (e, args) { // Split the "title suffix" to be the "category" because we don't have anything else in yet in the index. let results = args.results.results.map((r) => { const title = r.title; if (title.includes("|")) { // set the category r.raw.category = title.split("|")[1].trim(); r.title = title.split("|")[0].trim(); } else { r.raw.category = "YouTube"; } return r; }); // sort results per category results = results.sort((a, b) => { return a.raw.category.localeCompare(b.raw.category); }); // Set a category Label for the first results of the category. // Keep only 3 items per category. let lastCategory = ""; let categoryCount = 0; results.forEach((r, idx) => { if (lastCategory !== r.raw.category) { lastCategory = r.raw.category; categoryCount = 0; r.raw.categoryLabel = r.raw.category; } categoryCount++; if (categoryCount > 3) { // we already have 3 items for this category r.toDelete = true; } }); // clear out the results marked for deletion results = results.filter((r) => !r.toDelete); args.results.results = results; }); }); $(document).ready(function () { $(".inline").click(function () { $(".coveo-show-if-no-results").hide(); }); }); document.addEventListener("DOMContentLoaded", function () { $("#searchbox .magic-box input").attr("placeholder", "Search Appstore Docs (BETA)"); }); </script> <div class="CoveoAnalytics" data-anonymous="true" data-search-hub="appstore-dropdown-search"></div> <div class="coveo-search-section"> <div class="CoveoSearchbox" data-enable-omnibox="true" data-enable-query-syntax="true" data-search-as-you-type-delay="300"> <div class="CoveoOmniboxResultList" data-layout="list"> <div class="coveo-show-if-results"> <script class="result-template" type="text/x-underscore"> <div> <% if (raw.categoryLabel ) { %> <div class="category-label CoveoFieldValue" data-field="@categoryLabel"></div> <% } %> <div class="co-highlight"> <div> <a class='CoveoResultLink'></a> </div> <div class='CoveoExcerpt'></div> <div class="CoveoFieldValue CoveoCrumb" data-field="@crumb"></div> </div> </div> </script> </div> <div class="coveo-show-if-no-results"> <p>No results found</p> <div class="co-empty">Try a different or more specific query.</div> </div> </div> </div> </div> </div> <script> document.addEventListener("DOMContentLoaded", function () { var searchInterface = document.querySelector("#searchbox"); Coveo.$$(searchInterface).on("populateOmnibox", function (e, populateOmniboxObject) { var linkElement = document.createElement("a"); var query = populateOmniboxObject.completeQueryExpression.word; if (!query) { return; } linkElement.href = "https://developer.amazon.com/docs/appstore/search.html#q=" + encodeURIComponent(query); linkElement.text = 'See more results for "' + query + '"'; linkElement.className = "coveo-omnibox-selectable co-more-results"; linkElement["no-text-suggestion"] = true; linkElement.addEventListener("keyboardSelect", function () { linkElement.click(); }); populateOmniboxObject.rows.push({ element: linkElement, zIndex: 0 }); }); }); </script> <div class="productTitle">Catalog Integration</div> <p class="external"> <a href="#" id="collapseAll">Collapse All</a> | <a href="#" id="expandAll">Expand All</a> </p> <ul id="docnavsidebar" class="docnav"> <li class="level1 folderTitle"> <a class="subfoldersTitle" href="#">Catalog Ingestion</a> <ul> <li class="level1items open"><a href="../catalog/getting-started-catalog-ingestion.html">Getting Started with Catalog Ingestion</a></li> <li class="level1items"><a href="../catalog/create-your-catalog-file.html">Step 1: Create your Catalog File</a></li> <li class="level1items"><a href="../catalog/validate-your-catalog-file.html">Step 2: Validate Your Catalog File</a></li> <li class="level1items"><a href="../catalog/set-up-your-aws-account.html">Step 3: Set Up Your AWS Account for Catalog Ingestion</a></li> <li class="level1items"><a href="../catalog/upload-your-catalog-file.html">Step 4: Upload Your Catalog File to Amazon</a></li> <li class="level1items"><a href="../catalog/verify-your-uploaded-catalog-file.html">Step 5: Verify that Your Uploaded Catalog Has No Errors</a></li> <li class="level1items"><a href="../catalog/update-your-catalog-at-regular-intervals.html">Step 6: Update Your Catalog at Regular Intervals</a></li> <li class="level1items"><a href="../catalog/use-page-collation.html">Optional: Use Page Collation</a></li> <li class="level1items"><a href="../catalog/catalog-ingestion-best-practices.html">Catalog Ingestion Best Practices</a></li> <li class="level1items"><a href="../catalog/release-notes-catalog-ingestion.html">Catalog Integration Release Notes</a></li> </ul> </li><li class="level1 folderTitle"> <a class="subfoldersTitle" href="#">Catalog Data Format Schema</a> <ul> <li class="level1items"><a href="../catalog/data-format-schema-reference.html">Catalog Data Format (CDF) Overview</a></li> <li class="level1items"><a href="../catalog/all-elements.html">All CDF Elements</a></li> <li class="level1items"><a href="../catalog/works-elements.html">Works Elements</a></li> <li class="level1items"><a href="../catalog/movie-elements.html">Movie Elements</a></li> <li class="level1items"><a href="../catalog/tvepisode-elements.html">TvEpisode Elements</a></li> <li class="level1items"><a href="../catalog/tvseason-elements.html">TvSeason Elements</a></li> <li class="level1items"><a href="../catalog/tvshow-elements.html">TvShow Elements</a></li> <li class="level1items"><a href="../catalog/extra-elements.html">Extra Elements</a></li> <li class="level1items external"><a rel="noopener noreferrer" target="_blank" href="https://amzndevresources.com/catalog/catalog.xsd">Catalog Data Format Schema Definition (XSD)</a></li> <li class="level1items"><a href="../catalog/data-format-ingestion-report-messages.html">Catalog Ingestion Report Messages</a></li> </ul> </li><li class="level1 folderTitle"> <a class="subfoldersTitle" href="#">Universal Search and Browse on Fire TV</a> <ul> <li class="level1items"><a href="../catalog/getting-started-universal-search-and-browse.html">Getting Started with Universal Search and Browse</a></li> <li class="level1items"><a href="../catalog/integrate-with-launcher.html">Step 1: Integrate Your App with the Fire TV Launcher</a></li> <li class="level1items"><a href="../catalog/verify-deep-links-from-the-catalog.html">Step 2: Verify Fire TV Deep Links</a></li> </ul> </li><li class="level1 folderTitle"> <a class="subfoldersTitle" href="#">Glossary and Resources</a> <ul> <li class="level1items"><a href="../catalog/glossary-catalog.html">Glossary for Catalog and Fire TV</a></li> <li class="level1items"><a href="../catalog/test-launcher-integration-with-the-test-app.html">Test Fire TV Launcher Integration with the Test App (Optional)</a></li> <li class="level1items"><a href="../catalog/test-launcher-integration-with-adb.html">Test Fire TV Launcher Integration with ADB (Optional)</a></li> </ul> </li> </ul> <hr class="resourceSeparator"> <div class="relatedResources">Other Resources</div> <ul id="entrypages"> <li><a href="../fire-tv/getting-started-developing-apps-and-games.html">Fire TV</a></li> <li><a href="../fire-tablets/ft-get-started.html">Fire Tablets</a></li> <li><a href="../fire-app-builder/overview.html">Fire App Builder</a></li> <li><a href="../html5-web-apps/webapp-setup-environment.html">HTML5 Web API</a></li> <li><a href="../app-submission/getting-started.html">Appstore Submission</a></li> <li><a href="../app-testing/test-criteria.html">App Testing</a></li> <li><a href="../policy-center/understanding-content-policy.html">Policy Center</a></li> <li><a href="../in-app-purchasing/iap-whats-new.html">In-App Purchasing API</a></li> <li><a href="../fling/understanding-the-amazon-fling-service.html">Fling SDK</a></li> <li><a href="https://community.amazondeveloper.com/c/amazon-appstore/17">Developer Portal Forums</a></li> </ul> </div> <script> $("li.open").parents('li').toggleClass("open"); </script> </div> <!-- main area --> <div class="mainColumn"> <div id="content"> <h1>Getting Started with Catalog Ingestion</h1> <div class="alert alert-warning" role="alert"><i class="fa fa-warning"></i> <b>Important:</b> At this time, Catalog Integration, which is a prerequisite for VSK for Fire TV, is available to select partners only.</div> <p>Catalog ingestion is the process of submitting your media to Amazon so that it can be surfaced to users. You first define all the metadata about your media (movies, tv shows) in a catalog file that conforms to a specific XML schema (the <a href="../catalog/all-elements.html">Catalog Data Format</a>, or CDF).</p> <p>You then upload this catalog file into an S3 bucket for Amazon to ingest. After Amazon ingests your catalog, Amazon runs some de-duplication processes and consolidates your media metadata into one primary database of content that can be surfaced to users in unified ways across multiple devices.</p> <ul id="markdown-toc"> <li><a href="#how-devices-interface-with-ingested-catalog-metadata" id="markdown-toc-how-devices-interface-with-ingested-catalog-metadata">How Devices Interface with Ingested Catalog Metadata</a></li> <li><a href="#beforeyoubegin" id="markdown-toc-beforeyoubegin">Requirements for Catalog Ingestion</a></li> <li><a href="#catalog-ingestion-process-overview" id="markdown-toc-catalog-ingestion-process-overview">Catalog Ingestion Process Overview</a></li> <li><a href="#latency-time-before-content-is-live" id="markdown-toc-latency-time-before-content-is-live">Latency Time Before Content is Live</a></li> <li><a href="#getting-started-faq" id="markdown-toc-getting-started-faq">Getting Started FAQ</a></li> <li><a href="#next-steps" id="markdown-toc-next-steps">Next Steps</a></li> </ul> <h2 id="how-devices-interface-with-ingested-catalog-metadata">How Devices Interface with Ingested Catalog Metadata</h2> <p>Catalog ingestion is not tied to delivery on a specific device. In other words, Fire TV and Echo Show can interface with your ingested catalog's content in different ways to play media.</p> <p>For example, Fire TV uniquely uses a <a href="../catalog/getting-started-universal-search-and-browse.html">Universal Search and Browse</a> feature to enable content discovery that includes catalog-ingested TV shows and movies. The main advantage of Universal Search and Browse is to allow for content discovery, since the search is not app specific but rather "universal" across all apps that have ingested their catalogs into Amazon.</p> <div class="alert alert-success" role="alert"><i class="fa fa-check-square-o"></i> <b>Tip:</b> In addition to integrating your catalog, if you're integrating with Fire TV, you will need to integrate with the Fire TV launcher. Because catalog integration is itself device agnostic, the documentation for Fire TV integration appears in a separate section: <a href="../catalog/getting-started-universal-search-and-browse.html">Universal Search and Browse on Fire TV</a>. Specifically, see <a href="../catalog/integrate-with-launcher.html">Step 1: Integrate Your App with the Fire TV Launcher</a>.</div> <p>On Fire TV, the <a href="../video-skills-fire-tv-apps/introduction.html">Video Skills Kit (VSK)</a> lets users interface with media that is immediately playable by apps that the user already has installed and authorized (e.g., signed in to). When users say an utterance such as "Play Interstellar," Fire TV opens movie detail page with different options to play the media, or in some cases opens the requested media and immediately begins to play it.</p> <p>Echo Show allows for <a href="../video-skills-multimodal-devices/introduction.html">VSK integration too</a> but doesn't incorporate Universal Search and Browse functionality. The VSK on Echo Show lets users play video content from web apps invoked from a web browser. In both cases, the catalog content you ingest can be surfaced to the various devices. Overall, different devices can interact with your ingested catalog in different ways, but the process for catalog ingestion remains the same. Catalog ingestion is device agnostic.</p> <h2 id="beforeyoubegin">Requirements for Catalog Ingestion</h2> <p>Before starting the catalog ingestion process, make sure that you have or can easily obtain the following requirements:</p> <ul> <li><strong>Video-on-Demand Content</strong>: Catalog ingestion is restricted to apps that have video-on-demand movies, TV shows, and other media (for example, the kind of media you find on <a href="https://www.imdb.com/">IMDb</a>).</li> <li><strong>Easy access to your media metadata</strong>: You'll need to export your media's metadata from a database; if you cannot export your metadata from a database, you will need to manually create your catalog file by hand. After exporting your metadata, you'll need to create a catalog file that structures the information according to the <a href="../catalog/all-elements.html">Catalog Data Format schema</a>.</li> <li><strong>An Amazon Web Services (AWS) account</strong>: You or someone in your organization will need an AWS account and familiarity with the AWS S3 tools or a willingness to learn about the AWS S3 tools. (Details are explained in <a href="../catalog/set-up-your-aws-account.html">Set Up Your AWS Account</a>.) You will need to run several AWS commands using the Command Line Interface (CLI) to <a href="../catalog/upload-your-catalog-file.html">upload your catalog file to AWS</a>, so that Fire TV can obtain your catalog for integration. Amazon recommends using the AWS SDK to automate this process.</li> <li><strong>Onboarding process and setup</strong>: It takes two weeks to set up our systems to provide you with an S3 bucket to test the catalog integration. Your Amazon business contact will also need to onboard you with the integration process. If you do not know who your Amazon business contact is, <a href="https://developer.amazon.com/support/contact-us">contact us</a>.</li> <li><strong>Minimal fields for matching</strong>: To provide metadata for matching, you must supply some required and additional fields. The <a href="../catalog/all-elements.html#Title">Title</a> field is required. Additional fields (a minimum of two but ideally three or more) are also required. The additional fields can include the following: <a href="../catalog/all-elements.html#ReleaseYear">ReleaseYear</a>, <a href="../catalog/all-elements.html#Credits">Credits (Actor and Director)</a>, <a href="../catalog/all-elements.html#RuntimeMinutes">RuntimeMinutes</a>, <a href="../catalog/all-elements.html#SeasonInShow">SeasonInShow</a> or <a href="../catalog/all-elements.html#SeasonID">SeasonID</a> (the SeasonID must reference a valid season), and <a href="../catalog/all-elements.html#ShowTitle">ShowTitle</a> or <a href="../catalog/all-elements.html#ShowID">ShowID</a>.</li> <li><strong>Scripts to automate the process</strong>: The catalog creation and upload process requires multiple steps that can be simplified using automation. Consider allocating a developer resource to help script and set up a cron job to automate and simplify this process for your organization.</li> </ul> <h2 id="catalog-ingestion-process-overview">Catalog Ingestion Process Overview</h2> <p>The catalog ingestion process involves the follow high-level steps:</p> <script> $( document ).ready(function() { $('.box0').first().addClass('active'); }); </script> <div class="userMap"> <h3 class="process_map" id="configure_your_feed"><i class="fa fa-map-o" aria-hidden="true"></i>&nbsp;<b>Catalog Ingestion</b></h3> <div class="content"><a href="../catalog/create-your-catalog-file.html"><div class="box box1"><span class="stepName">STEP 1:</span><br>Create your Catalog File</div></a></div> <div class="arrow">→</div> <div class="content"><a href="../catalog/validate-your-catalog-file.html"><div class="box box2"><span class="stepName">STEP 2:</span><br>Validate Your Catalog File</div></a></div> <div class="arrow">→</div> <div class="content"><a href="../catalog/set-up-your-aws-account.html"><div class="box box3"><span class="stepName">STEP 3:</span><br>Set Up Your AWS Account</div></a></div> <div class="arrow">→</div> <div class="content"><a href="../catalog/upload-your-catalog-file.html"><div class="box box4"><span class="stepName">STEP 4:</span><br>Upload Your Catalog File to Amazon</div></a></div> <div class="arrow">→</div> <div class="content"><a href="../catalog/verify-your-uploaded-catalog-file.html"><div class="box box5"><span class="stepName">STEP 5:</span><br>Verify Your Uploaded Catalog File</div></a></div> <div class="arrow">→</div> <div class="content"><a href="../catalog/update-your-catalog-at-regular-intervals.html"><div class="box box6"><span class="stepName">STEP 6:</span><br>Update your Catalog at Regular Intervals</div></a></div> <div class="arrow"> &nbsp;</div> <div class="content"><a href="../catalog/use-page-collation.html"><div class="box box7"><span class="stepName">Optional:</span><br>Use Page Collation</div></a></div> </div> <p>Here's some more detail about each of these steps:</p> <ul> <li><a href="../catalog/create-your-catalog-file.html">Step 1: Create Your Catalog File</a>: Create an XML file in our Catalog Data Format (CDF) for your media metadata.</li> <li><a href="../catalog/validate-your-catalog-file.html">Step 2: Validate Your Catalog File</a>: Validate your catalog file against the <a href="https://amzndevresources.com/catalog/catalog.xsd">CDF schema (XSD)</a> file.&nbsp;&nbsp;</li> <li><a href="../catalog/set-up-your-aws-account.html">Step 3: Set Up Your AWS Account</a>: Set up an AWS account with appropriate permissions to enable you to upload to a specific S3 bucket using the command line.</li> <li><a href="../catalog/upload-your-catalog-file.html">Step 4: Upload Your Catalog File</a>: Upload your catalog file to the S3 catalog bucket that Amazon creates for you.</li> <li><a href="../catalog/verify-your-uploaded-catalog-file.html">Step 5: Verify Your Uploaded Catalog File</a>: Review the Amazon-generated ingestion report to confirm that your catalog file was successfully ingested.</li> <li><a href="../catalog/update-your-catalog-at-regular-intervals.html">Step 6: Update your Catalog at Regular Intervals</a>: Review the Amazon-generated ingestion report to confirm that your catalog file was successfully ingested.</li> <li><a href="../catalog/use-page-collation.html">Optional: Use Page Collation</a>: Submit your catalog in smaller parts rather than submitting one large catalog.</li> </ul> <p>The following diagram shows this process visually:</p> <figure><img class="docimage " src="https://m.media-amazon.com/images/G/01/mobile-apps/dex/catalog/catalog_Process._TTH_.png" alt=""></figure> <h2 id="latency-time-before-content-is-live">Latency Time Before Content is Live</h2> <p>Catalog ingestion is not real time — data takes up to 24 hours to appear on devices and in search results.</p> <p>For best results, submit your catalog content 72 hours before broadcast (such as for high profile launches).</p> <p>If you want to avoid spoilers, you can use the <a href="../catalog/all-elements.html#MetadataAvailabilityDate"><code>MetadataAvailabilityDate</code></a> tag in your catalog file. This way your catalog items will not show up until the time declared for that content.</p> <h2 id="getting-started-faq">Getting Started FAQ</h2> <dl> <dt>Q: What is catalog ingestion?</dt> <dd>A: Catalog ingestion allows Amazon to surface movie and TV show content on entertainment devices such as Fire TV and Echo Show.</dd> <dt>Q: At a high level, what's the typical process for catalog ingestion?</dt> <dd>A: In a nutshell, you <a href="../catalog/create-your-catalog-file.html">create a catalog file</a> that contains your media metadata. The catalog file follows Amazon's <a href="../catalog/all-elements.html">Catalog Data Format (CDF) schema</a>. After <a href="../catalog/validate-your-catalog-file.html">validating your catalog file</a>, you then <a href="../catalog/upload-your-catalog-file.html">upload it to Amazon's AWS S3 service</a>, and then <a href="../catalog/verify-your-uploaded-catalog-file.html">verify that there were no errors</a> during the ingestion process.</dd> <dt>Q: How often should we go through this process of updating our catalog?</dt> <dd>A: As a best practice, Amazon recommends resourcing an engineer or developer to automate the catalog export and upload process. The catalog needs to be uploaded at least once a week, but you can upload your catalog file as frequently as your ingestion interval allows (on Fire TV, this ingestion interval is 4 hours). <em>Note: Regardless of whether you actually have changes or updates to your catalog, you must update your catalog at least once every three weeks.</em> Catalog files older than 3 weeks become stale, and the catalog content is removed. To avoid the risk of deactivation due to stale catalog content, set your upload process to run weekly, regardless of whether there have been any catalog updates.</dd> <dt>Q: Some of this sounds pretty technical. Who in my org should be handling this process?</dt> <dd>A: Preferably, an engineer or IT professional will be handling the creation of and uploading of your catalog file. Amazon highly recommends having an engineer automate this process. If an engineer is unavailable, Amazon recommends that the person creating and uploading the catalog file be comfortable working with XML and be comfortable executing commands using a command line interface.</dd> </dl> <h2 id="next-steps">Next Steps</h2> <p>Ready to get started? Go to <a href="../catalog/create-your-catalog-file.html">Step 1: Create Your Catalog File</a>.</p> <hr> <p id="tech-docs-updated-date"><small><i>Last updated: Dec 21, 2023</i></small></p> </div> </div> </div><!--/.container--> </div><!--/.page-container--> <style> .dpFooter .dpfNav { min-height: 220px; } </style> <link rel="stylesheet" href="https://amzndevresources.com/jekyll/css/search-fullpage.css"> <link rel="stylesheet" href="https://amzndevresources.com/jekyll/js/unload.js"> </div> <section class="dp-content-slot dp-content-pixel-tracker-slot"> <div class="dp-content-slot-inner container"> </div> </section> <footer class='dpFooter'> <a class='dpfBackToTopLink' href='#'>Back to top</a> <nav class="dpfNav accordion clearfix"> <div class='dpfWidth'> <div class='dpfnHideRightMargin'> <div class='dpfnColWrap'> <div class="dpfnCol"> <div class="dpfnGroup accrItem"> <div class='dpIconArrow accrHandle'></div> <h3>Resources</h3> <ul> <li><a href="/apps-and-games/blogs">Appstore Developer Blog</a></li> <li><a href="/apps-and-games/documentation">Technical Documentation</a></li> <li><a href="/apps-and-games/devhuddle">Amazon Developer Huddle</a></li> </ul> </div> </div> <div class="dpfnCol"> <div class="dpfnGroup accrItem"> <div class='dpIconArrow accrHandle'></div> <h3>Supported devices</h3> <ul> <li><a href="/apps-and-games/fire-tv">Amazon Fire TV</a></li> <li><a href="/apps-and-games/fire-tablets">Fire tablets</a></li> </ul> </div> </div> </div> <div class='dpfnColWrap'> <div class="dpfnCol"> <div class="dpfnGroup accrItem"> <div class='dpIconArrow accrHandle'></div> <h3>Other services & APIs</h3> <ul> <li><a href="/apps-and-games/small-business-program">Small Business Accelerator Program</a></li> <li><a href="/docs/reports-promo/promo-overview.html ">Developer Promotions Console</a></li> <li><a href="/apps-and-games/alexa-for-video-publishers">Alexa for video publishers</a></li> <li><a href="/apps-and-games/login-with-amazon">Login with Amazon</a></li> <li><a href="/docs/amazon-data-portability/overview.html">Amazon Data Portability</a></li> <li><a href="/frustration-free-setup">Frustration-Free Setup</a></li> <li><a href="/incentives-api">Amazon Incentives API</a></li> <li><a href="/apps-and-games/merch">Amazon Merch on Demand</a></li> <li><a href="/docs/music/landing_home.html">Amazon Music</a></li> </ul> </div> </div> <div class="dpfnCol"> <div class="dpfnGroup accrItem"> <div class='dpIconArrow accrHandle'></div> <h3>Support</h3> <ul> <li><a href="https://community.amazondeveloper.com/">Appstore Developer Community</a></li> <li><a href="/docs/app-submission/faq-landing.html">FAQs</a></li> <li><a href="/support/contact-us">Contact Us</a></li> </ul> </div> <div class="dpfnGroup accrItem"> <div class='dpIconArrow accrHandle'></div> <h3>Legal</h3> <ul> <li><a href="/terms-and-agreements">Terms & Agreements</a></li> <li><a href="https://www.amazon.com/gp/help/customer/display.html?nodeId=GX7NJQ4ZB8MHFRNJ">Privacy Notice</a></li> </ul> </div> </div> </div> </div> </div> </nav> <div class="dpfSocialLocal clearfix"> <div class='dpfWidth'> <div class='dpfLocale'> <nav class="dpLangSwitcher dpsfFlyout"> <span class='dplsTitle'>Language</span> <div class='dplsSwitch'> <span class="dplsCurrent dpsfFlyoutCurrent"> <i class='dpsfIcon dpsfIconGlobe'></i> English </span> <div class='dplsOptionsWrap dpsfFlyoutWrap'> <ul class="dplsOptions dpsfFlyoutContent"> <li class="dplsOption dpsfFlyoutItem dplsOptionActive"> <a data-locale="en_US" href="/docs/catalog/getting-started-catalog-ingestion.html"> English </a> </li> <li class="dplsOption dpsfFlyoutItem "> <a data-locale="zh_CN" href="/zh/docs/catalog/getting-started-catalog-ingestion.html"> Chinese (中文) </a> </li> <li class="dplsOption dpsfFlyoutItem "> <a data-locale="ja_JP" href="/ja/docs/catalog/getting-started-catalog-ingestion.html"> Japanese (日本語) </a> </li> </ul> </div> </div> </nav> </div> <div class="dpfSocial"> <span class="dpfSocialTitle"> Follow Us: </span> <a href="https://www.youtube.com/channel/UCT9ApARFgQJOeqD-ygmxnJQ"> <img src="https://m.media-amazon.com/images/G/01/mobile-apps/dex/logo-youtube.png" alt="youtube_icon"/> </a> <a href="https://www.linkedin.com/showcase/amazon-appstore-developers"> <img src="https://m.media-amazon.com/images/G/01/mobile-apps/dex/logo_linkedin._CB1704305834_.png" alt="linkedin_icon"/> </a> <a href="https://www.twitter.com/AmazonAppDev"> <img src="https://m.media-amazon.com/images/G/01/mobile-apps/dex/logo_X.png" alt="X_icon"/> </a> <a href="https://www.facebook.com/AmazonAppDev"> <img src="https://m.media-amazon.com/images/G/01/mobile-apps/dex/logo_facebook02.png" alt="facebook_icon"/> </a> <a href="/apps-and-games/blog"> <img src="https://images-na.ssl-images-amazon.com/images/G/01/mobile-apps/dex/logo-blog._V290989945_.png" alt="blog_icon"/> </a> </div> </div> </div> <div class="dpfAreaOfInterest dpsfFlyout"> <span class='dpfaCurrent'> <i class='dpsfIcon dpsfIconDots'></i> </span> <div class="dpfWidth dpsfFlyoutWrap"> <div class="dpfaItems dpsfFlyoutContent"> <h3><hza:string id="area_of_interest_title" /></h3> <div class="dpfaItem dpsfFlyoutItem"> <a href="/alexa"> <span class='dpfaiText'>Alexa</span> <img src="https://m.media-amazon.com/images/G/01/mobile-apps/dex/platform-logos/white/Alexalogoheaderwhite._V506548913_.png" alt="Alexa" /> </a> </div> <div class="dpfaItem dpsfFlyoutItem"> <a href="/apps-and-games"> <span class='dpfaiText'>Amazon Appstore</span> <img src="https://m.media-amazon.com/images/G/01/mobile-apps/dex/platform-logos/white/Appstorelogowhite.png" alt="Amazon Appstore" /> </a> </div> <div class="dpfaItem dpsfFlyoutItem"> <a href="https://aws.amazon.com"> <span class='dpfaiText'>Amazon Web Services</span> <img src="https://m.media-amazon.com/images/G/01/mobile-apps/dex/platform-logos/white/AWS_logo_RGB_WHT._CB1506540482_.png" alt="Amazon Web Services" /> </a> </div> </div> </div> </div> <div class="dpfCopyright"> © 2010-2024, Amazon.com, Inc. or its affiliates. All Rights Reserved. </div> </footer> </div></body> <!-- Google Tag Manager (noscript) --> <noscript><iframe sandbox src="https://www.googletagmanager.com/ns.html?id=GTM-5LVXJD4" height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript> <!-- End Google Tag Manager (noscript) --> </html>

Pages: 1 2 3 4 5 6 7 8 9 10