--- title: "Badger To Firebolt Reference" slug: "badger-to-firebolt-reference" updated: 2026-06-30T14:22:34Z published: 2026-06-30T14:22:34Z canonical: "docs.developer.comcast.com/badger-to-firebolt-reference" --- > ## Documentation Index > Fetch the complete documentation index at: https://docs.developer.comcast.com/llms.txt > Use this file to discover all available pages before exploring further. # Badger To Firebolt Reference This document provides reference information for developers who are currently using legacy devices, our legacy API, or older versions of Firebolt**®**. --- ## Feature reference The following section provides information about feature flows across our different stacks. ### User entitlements Entitlements are handled in a similar way across all of our technology stacks. The primary difference is that our legacy stack uses the [accountLink](/v2-0/docs/accountlink-1) method set, while our Firebolt stack uses the [Discovery](https://docs.developer.comcast.com/docs/latest/core-discovery) module. In practice, both functions act similarly in your app. When a user signs in to an account, you use a *sign-in* method to inform aggregated experiences that a user is authenticated. When a user signs out, you use the corresponding *sign-out* method to make sure the information is no longer used. Additionally, you can also add an array of available entitlements with a *sign-in* method to inform the platform of specific programs the user has access to. If you choose not to bundle entitlements with the *sign-in* method, you may also use an *entitlement* method in the same way. Please note that a *sign-out* method does not remove user entitlements. You must use the *entitlement* method to remove entitlements from a logged-out user. | | **Legacy** | **Scaled** | **EntertainmentOS** | | --- | --- | --- | --- | | **Version** | $badger | Firebolt 0.8.1 | Firebolt 1.7.0 | | **Sign-In** | `accountLink().signIn()` Optional: `accountLink().updateEntitlements()` | `Discovery.signIn()` Optional: `Discovery.entitlements()` | `Discovery.signIn()` Optional: `Discovery.contentAccess()` | | **Sign-Out** | `accountLink().signOut()` | `Discovery.signOut()` Optional: `Discovery.entitlements()` | `Discovery.signOut()` Optional: `Discovery.clearContentAccess()` | | **Entitlement** | `accountLink().updateEntitlements()` | `Discovery.entitlements()` | `Discovery.contentAccess()` | > [!WARNING] > **Clearing entitlements** > > On scaled devices, entitlements are only cleared if you call `Discovery.entitlements()` with an empty array! ### Deep links Deep links are handled differently on our legacy stack compared to our EntOS stack. With Firebolt, deep links are expressed as navigation intents, which can be received from almost any action a user takes: a voice command, an EntOS tile, or even a search result. Unlike the system used by our legacy stack, navigation intents are far more dynamic. Your app no longer needs to parse a URL, because navigation intents tell your app both what caused the intent and where to go using just a JSON object. This allows for more specific destinations (not just content, but searches and promotional pages) and works whether your app was already open or not. If it was already open, your app will not even need to reload. All you need to do to use navigation intents is to set up listeners in your app. Once your app has fully loaded, navigation intents can be recieved by your app and used to move directly to content. More information can be found in our [Content Discovery](/v2-0/docs/content-discovery) guide. --- On our legacy devices and $badger apps, deep links are appmanager links expressed as a URL (uniform resource locator) as demonstrated in the example below. `appmanager:launchApplication#appId=<providedAppId>&additionalLaunchParams=%7B%22isAsset%22%3A%22true%22%2C%22launchedFrom%22%3A%22entityPage%22%2C%22param.launchpoint%22%3A%22playback%22%2C%22param.assetId%22%3A%221059877%22%7D` This deep link is sent with metadata in the [media:content](/v2-0/docs/metadata-specifications#mediacontent) attribute, and opens up a specific piece of content. Replace `<providedAppId>` with your appId. Comcast will assign your organization an appId when your app is registered on the developer portal. ### Authentication tokens On EntertainmentOS, authentication tokens are managed through individual Authentication methods. Our scaled devices cannot use these calls, so you must call the `Authentication.token()` method instead to manage tokens. The table below maps the current call to the original token type. | | **Scaled** | **EntertainmentOS** | | --- | --- | --- | | **Version** | Firebolt 0.8.1 | Firebolt 1.7.0 | | **Platform Token** | `Authentication.token('platform')` | `Authentication.root()` | | **Device (XACT) Token** | `Authentication.token('device')` | `Authentication.device()` | | **Distributor (CIMA) Token** | `Authentication.token('distributor')` | `Authentication.session()` | --- ## Legacy replacement calls The following section provides replacement calls to developers transitioning X1 apps from our legacy API ($badger) to Firebolt. Unless otherwise specified, all Firebolt calls are referring to the [Core SDK](https://docs.developer.comcast.com/docs/latest/core). Additionally, all legacy calls are prefaced with `$badger.`. Please note that this page does not identify Firebolt's required APIs. The required calls may be found on the [Baseline Firebolt APIs](/v2-0/docs/baseline-firebolt-api-implementations) page. ### Authentication | **Legacy API** | **Legacy Parameter(s)** | **Firebolt API** | **Firebolt Parameter(s)** | | --- | --- | --- | --- | | getAppAuth().get() | N/A | This call does not exist in Firebolt. | | getAppAuth().upsert() | `userid` `data` | This call does not exist in Firebolt. | | getAppAuth().delete() | N/A | This call does not exist in Firebolt. | | platformAuth().getToken() | N/A | Authentication.root() | N/A | | platformAuth().refreshToken() | N/A | N/A | | platformAuth().getXact() | N/A | Authentication.device() | N/A | | getBearerToken() | N/A | Authentication.session() | N/A | ### App state management | **Legacy API** | **Legacy Parameter(s)** | **Firebolt API** | **Firebolt Parameter(s)** | | --- | --- | --- | --- | | shutdown() | N/A | Lifecycle.close() | `reason` | | dismissLoadingScreen() | `args` | Lifecycle.ready() | N/A | | active() | N/A | This call does not exist in Firebolt. | | config() | N/A | This call does not exist in Firebolt. | | deeplink() | `uri` | Discovery.launch() | `appId,` `intent` | | deeplinkToCompanyPage() | `companyId` | Discovery.launch() | `appId: "urn:firebolt:apps:main",` `intent.action: "section",` `intent.data.sectionName: "company:<companyId>"` | | dial().getDeviceId() | N/A | SecondScreen.device() | `type` | | dial().getDeviceName() | N/A | SecondScreen.friendlyName() | N/A | | dial().getPayload() | N/A | Parameters.initialization().SecondScreen.launchRequest | N/A | | dial().onLaunch() | N/A | SecondScreen.listen() | `event: 'launchRequest',` `callback` | ### Discovery & metrics | **Legacy API** | **Legacy Parameter(s)** | **Firebolt API** | **Firebolt Parameter(s)** | | --- | --- | --- | --- | | accountLink().appLaunch() | `subscriptionEntitlements` | Discovery.contentAccess() | `availabilities,` `entitlements` | | accountLink().compareAppSettings() | `settings` | This call does not exist in Firebolt. | | accountLink().createLaunchPadTile() | `tile` | Discovery.watchNext() | `title,` `identifiers,` `expires,` `images` | | accountLink().deleteLaunchPadTile() | `tile: empty` | This call does not exist in Firebolt. | | accountLink().mediaEvent() | `contentId,` `completed,` `progress,` `progressUnits` | Discovery.watched() | `entityId,` `progress,` `completed,` `watchedOn,` `agePolicy` | | accountLink().signIn() | `subscriptionEntitlements` | Discovery.signIn() | `entitlements` | | accountLink().signOut() | N/A | Discovery.signOut() | N/A | | accountLink().updateEntitlements() | `subscriptionEntitlements` | Discovery.contentAccess() [Changing Entitlements] | `availabilities,` `entitlements` | | Discovery.clearContentAccess() [Remove all Entitlements] | N/A | | errorMetricsHandler() | `message,` `visible,` `code,` `args` | Metrics.error() | `type,` `code,` `description,` `visible,` `parameters,` `agePolicy` | | launchCompletedMetricsHandler() | Replaced by [dismissLoadingScreen](/v2-0/docs/transitioning-from-legacy#lifecycle) | | pageViewMetricsHandler() | `page,` `args` | Metrics.page() | `pageId,` `agePolicy` | | appActionMetricsHandler() [Playback Started] | `action: "CONTENT_STATE_CHANGED",` `evt.contentState: "STARTED"` | Metrics.startContent() | `entityId,` `agePolicy` | | appActionMetricsHandler() [Playback Stopped] | `action: "CONTENT_STATE_CHANGED",` `evt.contentState: "STOPPED"` | Metrics.stopContent() | `entityId,` `agePolicy` | | userActionMetricsHandler() | `action,` `args` | Metrics.action() [User Click] | `category: 'user',` `type: 'click',` `parameters,` `agePolicy` | | Metrics.action() [Other User Input] | `category: 'user',` `type: 'input',` `parameters,` `agePolicy` | | Metrics.action() [Other User Event] | `category: 'user',` `type: '[event]',` `parameters,` `agePolicy` | | metricsHandler() | `segment_name,` `args` | Metrics.action() | `category,` `type,` `parameters,` `agePolicy` | | userErrorMetricsHandler() | `message,` `visible,` `code,` `args` | Metrics.error() | `type,` `code,` `description: 'UserError',` `visible,` `parameters,` `agePolicy` | | analytics.error() | `visible,` `message` | Metrics.error() | `type,` `code,` `description,` `visible,` `parameters,` `agePolicy` | | analytics.event() | `event` | Metrics.action() | `category,` `type,` `parameters,` `agePolicy` | | analytics.pageView() | `page,` `args` | Metrics.page() | `pageId,` `agePolicy` | | analytics.userAction() | See `userActionMetricsHandler` | | analytics.userError() | See `userErrorMetricsHandler` | ### Events, settings, & notifications | **Legacy API** | **Legacy Parameter(s)** | **Firebolt API** | **Firebolt Parameter(s)** | | --- | --- | --- | --- | | userPreferences().subscribeToSettings() [Closed Captions] | `$badger.PREFERENCES.CLOSED_CAPTIONING,` `callback` | Accessibility.listen() [Closed Captions] | `event:'closedCaptionsSettingsChanged',` `callback` | | userPreferences().subscribeToSettings() [Voice Guidance] | `$badger.PREFERENCES.VOICE_GUIDANCE,` `callback` | Accessibility.listen() [Voice Guidance] | `event:voiceGuidanceSettingsChanged',` `callback` | | userPreferences().subscribeToSettings() [Personalized Recommendations] | `$badger.PREFERENCES.RECOMMENDATIONS_BASED_ON_HISTORY,` `callback` | Discovery.listen() [Personalized Recommendations] | `event:'policyChanged',` `callback` | | userPreferences().subscribeToSettings() [Watch History] | `$badger.PREFERENCES.RECENTLY_VIEW_CONTENT,` `callback` | Discovery.listen() [Watch History] | `event:'policyChanged',` `callback` | | userPreferences().subscribeToSettings() [Watch History Sharing] | `$badger.PREFERENCES.SHARE_WATCH_HISTORY_STATUS,` `callback` | Discovery.listen() [Watch History Sharing] | `event:'policyChanged',` `callback` | | userPreferences().subscribeToSettings() [Friendly Device Name] | `$badger.PREFERENCES.DEVICE_FRIENDLY_NAME,` `callback` | Device.listen() [Friendly Device Name] | `event:'deviceNameChanged',` `callback` | | userPreferences().subscribeToSettings() [Power Saving Status) | `$badger.PREFERENCES.POWER_SAVING,` `callback` | This call does not exist in Firebolt. | | [Broadcast a deeplink] | N/A | Discovery.listen() | `event:'navigateTo',` `callback` | | userPreferences().closedCaptioning() | N/A | Accessibility.closedCaptionsSettings() | N/A | | userPreferences().voiceGuidance() | N/A | Accessibility.voiceGuidanceSettings() | N/A | | networkConnectivity() | N/A | Device.network().type | N/A | | userPreferences().setting() [Closed Captions] | `$badger.PREFERENCES.CLOSED_CAPTIONING` | Accessibility.closedCaptionsSettings() | N/A | | userPreferences().setting() [Voice Guidance] | `$badger.PREFERENCES.VOICE_GUIDANCE` | Accessibility.voiceGuidanceSettings() | N/A | | userPreferences().setting() [Personalized Recommendations] | `$badger.PREFERENCES.RECOMMENDATIONS_BASED_ON_HISTORY` | Discovery.policy().enableRecommendations | N/A | | userPreferences().setting() [Watch History] | `$badger.PREFERENCES.RECENTLY_VIEW_CONTENT` | Discovery.policy().rememberWatchedPrograms | N/A | | userPreferences().setting() [Watch History Sharing] | `$badger.PREFERENCES.SHARE_WATCH_HISTORY_STATUS` | Discovery.policy().shareWatchHistory | N/A | | userPreferences().setting() [Friendly Device Name] | `$badger.PREFERENCES.DEVICE_FRIENDLY_NAME` | Device.name() | N/A | ### Info | **Legacy API** | **Firebolt API** | | --- | --- | | info().zipcode | Localization.postalCode() | | info().timezone | This call does not exist in Firebolt. | | info().timeZone | This call does not exist in Firebolt. | | info().receiverId | This call does not exist in Firebolt. | | info().deviceHash | Device.uid() | | info().householdId | This call does not exist in Firebolt. | | info().privacySettings.lmt | Advertising.policy().limitAdTracking | | info().privacySettings.us_privacy | | deviceCapabilities().deviceType | Device.type() | | deviceCapabilities().nativeDimensions | Device.screenResolution() | | deviceCapabilities().webBrowser.browserType | Device.platform() | | deviceCapabilities().settopHdrSupport | Device.hdr() | | deviceCapabilities().tvHdrSupport | | deviceCapabilities().settopHDCPVersion | Device.hdcp() | | deviceCapabilities().tvHDCPVersion | | deviceCapabilities().videoDimensions | Device.videoResolution() | > [!WARNING] > **Limit Ad Tracking policy** > > The `us_privacy` setting is only returned in `Parameters.initialization()`. A better method of keeping track of the `us_privacy` setting is through listening to the `limitAdTracking` policy. Learn more on our [Limit Ad Tracking](/v2-0/docs/limit-ad-tracking-and-ccpa-technical-requirements) page. ### User prompts | **Legacy API** | **Legacy Parameter(s)** | **Firebolt API** | **Firebolt Parameter(s)** | | --- | --- | --- | --- | | userPreferences().promptSignInEmail() | `opts` | Keyboard.email() | `type: "signIn",` `message` | | userPreferences().promptSignUpEmail() | `opts` | Keyboard.email() | `type: "signUp",` `message` | | verifyPin() | `content_pin` | This call does not exist in Firebolt. | | verifyPurchasePin() | `purchase_pin` | This call does not exist in Firebolt. | | showContentPinOverlay() | N/A | Profile.approveContentRating() | N/A | | showPurchasePinOverlay() | N/A | Profile.approvePurchase() | N/A | ### Ad platform | **Legacy API** | **Firebolt API** | | --- | --- | | adPlatform().initObject() | Advertising.config() | | adPlatform().advertisingId() | Advertising.advertisingId() | | adPlatform().limitAdTracking() | Advertising.policy().limitAdTracking | | adPlatform().deviceAdAttributes() | Advertising.deviceAttributes() | | adPlatform().appStoreId() | Advertising.appBundleId() | ### Other | **Legacy API** | **Legacy Parameter(s)** | **Firebolt API** | **Firebolt Parameter(s)** | | --- | --- | --- | --- | | callback() | `pid,` `success,` `json` | Handled by Firebolt Transport Layer | | showToast() | `messageIdentifier` | This call does not exist in Firebolt. |