DocumentationAdobe PassAdobe Pass Authentication

Header - X-Device-Info

Last update: March 28, 2025
  • Topics:
  • Authentication
NOTE
The content on this page is provided for information purposes only. Usage of this API requires a current license from Adobe. No unauthorized use is permitted.

Overview

The X-Device-Info request header contains the client information (device, connection and application) related to the actual streaming device and is used to determine platform-specific rules that MVPDs may enforce.

Syntax

X-Device-Info: <device_information>
Header TypeRequest header
StandardNo

Directives

<device_information>

The Base64-encoded value of the JSON element containing at least the attributes marked as required by the following table.

PresenceKeyDescriptionRestrictedPossible Values
primaryHardwareTypeThe device’s primary hardware type.✓

The values are restricted:

  • Camera
  • DataCollectionTerminal
  • Desktop
  • EmbeddedNetworkModule
  • eReader
  • GamesConsole
  • GeolocationTracker
  • Glasses
  • MediaPlayer
  • MobilePhone
  • PaymentTerminal
  • PluginModem
  • SetTopBox
  • TV
  • Tablet
  • WirelessHotspot
  • Wristwatch
  • Unknown
requiredmodelThe device’s model name.e.g. iPhone, SM-G930V, AppleTV, etc.
requiredversionThe device’s version.e.g. 2.0.1, etc.
manufacturerThe device’s manufacturing company/organization.e.g. Samsung, LG, ZTE, Huawei, Motorola, Apple, etc.
vendorThe device’s selling company/organisation.e.g. Apple, Samsung, LG, Google, etc.
requiredosNameThe device’s Operating System (OS) name.✓

The values are restricted:

  • Android
  • Chrome OS
  • Linux
  • Mac OS
  • OS X
  • OpenBSD
  • Roku OS
  • Windows
  • iOS
  • tvOS
  • webOS
osFamilyThe device’s Operating System (OS) group name.✓

The values are restricted:

  • Android
  • BSD
  • Linux
  • PlayStation OS
  • Roku OS
  • Symbian
  • Tizen
  • Windows
  • iOS
  • tvOS
  • macOS
  • webOS
osVendorThe device’s Operating System (OS) supplier.✓

The values are restricted:

  • Amazon
  • Apple
  • Google
  • LG
  • Microsoft
  • Mozilla
  • Nintendo
  • Nokia
  • Roku
  • Samsung
  • Sony
  • Tizen Project
requiredosVersionThe device’s Operating System (OS) version.e.g. 10.2, 9.0.1, etc.
browserNameThe browser’s name.✓

The values are restricted:

  • Android Browser
  • Chrome
  • Edge
  • Firefox
  • Internet Explorer
  • Opera
  • Safari
  • SeaMonkey
  • Symbian Browser
browserVendorThe browser’s building company/organisation.✓

The values are restricted:

  • Amazon
  • Apple
  • Google
  • Microsoft
  • Motorola
  • Mozilla
  • Netscape
  • Nintendo
  • Nokia
  • Samsung
  • Sony Ericsson
browserVersionThe device’s browser version.e.g. 60.0.3112
userAgentThe device’s user agent.e.g. Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_3) AppleWebKit/602.4.8 (KHTML, like Gecko) Version/10.0.3 Safari/602.4.8
displayWidthThe device’s physical screen width.
displayHeightThe device’s physical screen height.
displayPpiThe device’s physical screen pixel density.e.g. 294
diagonalScreenSizeThe device’s physical screen diagonal dimension in inches.e.g. 5.5, 10.1
connectionIpThe device’s IP used for sending HTTP requests.e.g. 8.8.4.4
connectionPortThe device’s port used for sending HTTP requests.e.g. 53124
requiredconnectionTypeThe network connection type.e.g. WiFi, LAN, 3G, 4G, 5G
connectionSecureThe network connection security status.✓

The values are restricted:

  • true - in the case of a secure network
  • false - in the case of a public hot spot
applicationIdThe application’s unique identifier.e.g. REF30

Examples


// Device information
// {
//  "primaryHardwareType" : "MobilePhone",
//  "model":"SM-S901U",
//  "vendor":"samsung",
//  "version":"r0q",
//  "manufacturer":"samsung",
//  "osName":"Android",
//  "osVersion":"14"
// }

// BASE64-encoded
// ewogICJwcmltYXJ5SGFyZHdhcmVUeXBlIiA6ICJNb2JpbGVQaG9uZSIsCiAgIm1vZGVsIjoiU00tUzkwMVUiLAogICJ2ZW5kb3I
// iOiJzYW1zdW5nIiwKICAidmVyc2lvbiI6InIwcSIsCiAgIm1hbnVmYWN0dXJlciI6InNhbXN1bmciLAogICJvc05hbWUiOiJBbmRyb
// 2lkIiwKICAib3NWZXJzaW9uIjoiMTQiCn0=

X-Device-Info: ewogICJwcmltYXJ5SGFyZHdhcmVUeXBlIiA6ICJNb2JpbGVQaG9uZSIsCiAgIm1vZGVsIjoiU00tUzkwMVUiLAogICJ2ZW5kb3IiOiJzYW1zdW5nIiwKICAidmVyc2lvbiI6InIwcSIsCiAgIm1hbnVmYWN0dXJlciI6InNhbXN1bmciLAogICJvc05hbWUiOiJBbmRyb2lkIiwKICAib3NWZXJzaW9uIjoiMTQiCn0=

Cookbooks

IMPORTANT
The code snippets and documentation resources are provided for referencing purposes.
The code snippets are not exhaustive and may require additional modifications to work in your project.
Regardless of your actual implementation, the X-Device-Info header must contain a value formatted as described in the Directives section.

Browsers

For client applications running in a browser, the X-Device-Info header can be omitted as the browser will automatically send a minimal set of required information in the User-Agent header.

You can still use the X-Device-Info header to provide additional information about the device, connection, and application, in case your client application integrates a library or service that provides a device identification mechanism.

Mobile Devices

iOS & iPadOS

To build the X-Device-Info header for devices running iOS or iPadOS, you may refer to the following documents and below code snippet:

  • Apple developer documentation for UIDevice.
  • Apple developer documentation for Reachability.
  • Linux manual documentation for uname.
+ (NSString *)computeClientInformation {
        struct utsname u;
        uname(&u);

        NSString *hardware = [NSString stringWithCString:u.machine encoding:NSUTF8StringEncoding];

        UIDevice *device = [UIDevice currentDevice];

        NSString *deviceType;

        switch (UI_USER_INTERFACE_IDIOM()) {
            case UIUserInterfaceIdiomPhone:
                deviceType = @"MobilePhone";
                break;
            case UIUserInterfaceIdiomPad:
                deviceType = @"Tablet";
                break;
            case UIUserInterfaceIdiomTV:
                deviceType = @"TV";
                break;
            default:
                deviceType = @"Unknown";
        }

        CGRect screenRect = [[UIScreen mainScreen] bounds];
        NSNumber *screenWidth = @((float) screenRect.size.width);
        NSNumber *screenHeight = @((float) screenRect.size.height);

        Reachability *reachability = [Reachability reachabilityForInternetConnection];
        [reachability startNotifier];

        NetworkStatus status = [reachability currentReachabilityStatus];

        NSString *connectionType;

        if (status == NotReachable) {
            connectionType = @"notConnected";
        } else if (status == ReachableViaWiFi) {
            connectionType = @"WiFi";
        } else if (status == ReachableViaWWAN) {
            connectionType = @"cellular";
        }

        NSMutableDictionary *clientInformation = [@{
                @"type": deviceType,
                @"model": device.model,
                @"vendor": @"Apple",
                @"manufacturer": @"Apple",
                @"version": [hardware stringByReplacingOccurrencesOfString:device.model withString:@""],
                @"osName": device.systemName,
                @"osVersion": device.systemVersion,
                @"displayWidth": screenWidth,
                @"displayHeight": screenHeight,
                @"connectionType": connectionType,
                @"applicationId": @"REF30"
        } mutableCopy];

        NSError *error;
        NSData *jsonData = [NSJSONSerialization dataWithJSONObject:clientInformation options:NSJSONWritingPrettyPrinted error:&error];
        NSString *base64Encoded = [jsonData base64EncodedStringWithOptions:0];

        return base64Encoded;
}

The device information can be constructed the following way:

Key
Source
Value (example)
model
uname.machine
iPhone
vendor
hardcoded
Apple
manufacturer
hardcoded
Apple
version
uname.machine
8,1
displayWidth
UIScreen.mainScreen
320
displayHeight
UIScreen.mainScreen
568
osName
UIDevice.systemName
iOS
osVersion
UIDevice.systemVersion
10.2

The connection information can be constructed the following way:

Key
Source
Value (example)
connectionType
[Reachability currentReachabilityStatus]
connectionSecure

The application information can be constructed the following way:

Key
Source
Value (example)
applicationId
hardcoded
REF30

Android

To build the X-Device-Info header for devices running Android, you may refer to the following documents and below code snippet:

  • Android developer documentation for Build class.
private JSONObject computeClientInformation() {
     String LOGGING_TAG = "DefineClass.class";

     JSONObject clientInformation = new JSONObject();

     String connectionType;

     try {
          ConnectivityManager cm = (ConnectivityManager) getContext().getSystemService(CONNECTIVITY_SERVICE);
          NetworkInfo activeNetwork = cm.getActiveNetworkInfo();

          if (activeNetwork != null && activeNetwork.isConnectedOrConnecting()) {
              switch (activeNetwork.getType()) {
                    case ConnectivityManager.TYPE_WIFI: {
                        connectionType = "WIFI";
                        break;
                    }
                    case ConnectivityManager.TYPE_BLUETOOTH: {
                        connectionType = "BLUETOOTH";
                        break;
                    }
                    case ConnectivityManager.TYPE_MOBILE: {
                        connectionType = "MOBILE";
                        break;
                    }
                    case ConnectivityManager.TYPE_ETHERNET: {
                        connectionType = "ETHERNET";
                        break;
                    }
                    case ConnectivityManager.TYPE_VPN: {
                        connectionType = "VPN";
                        break;
                    }
                    case ConnectivityManager.TYPE_DUMMY: {
                        connectionType = "DUMMY";
                        break;
                    }
                    case ConnectivityManager.TYPE_MOBILE_DUN: {
                        connectionType = "MOBILE_DUN";
                        break;
                    }
                    case ConnectivityManager.TYPE_WIMAX: {
                        connectionType = "WIMAX";
                        break;
                    }
                    default:
                       connectionType = ConnectivityManager.EXTRA_OTHER_NETWORK_INFO;
              }
          } else {
                connectionType = ConnectivityManager.EXTRA_NO_CONNECTIVITY;
          }
     } catch (Exception e) {
          connectionType = "notAccessible";
     }

     try {
          clientInformation.put("model", Build.MODEL);
          clientInformation.put("vendor", Build.BRAND);
          clientInformation.put("manufacturer", Build.MANUFACTURER);
          clientInformation.put("version", Build.DEVICE);
          clientInformation.put("osName", "Android");
          clientInformation.put("osVersion", Build.VERSION.RELEASE);
          clientInformation.put("connectionType", connectionType);
          clientInformation.put("applicationId", "REF30");
     } catch (JSONException e) {
          Log.e(LOGGING_TAG, e.getMessage());
     }

     return Base64.encodeToString(clientInformation.toString().getBytes(), Base64.NO_WRAP);
}

The device information can be constructed the following way:

Key
Source
Value (example)
model
Build.MODEL
GT-I9505
vendor
Build.BRAND
samsung
manufacturer
Build.MANUFACTURER
samsung
version
Build.DEVICE
jflte
displayWidth
DisplayMetrics.widthPixels
600
displayHeight
DisplayMetrics.heightPixels
800
osName
hardcoded
Android
osVersion
Build.VERSION.RELEASE
5.0.1

The connection information can be constructed the following way:

Key
Source
Value (example)
connectionType
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/> getSystemService(Context.CONNECTIVITY_SERVICE).getActiveNetworkInfo().getType()
"WIFI","BLUETOOTH","MOBILE","ETHERNET","VPN","DUMMY","MOBILE_DUN","WIMAX","notAccessible"
connectionSecure

The application information can be constructed the following way:

Key
Source
Value (example)
applicationId
hardcoded
REF30

TV Connected Devices

tvOS

To build the X-Device-Info header for devices running tvOS, you may refer to the following documents and below code snippet:

  • Apple developer documentation for UIDevice.
  • Apple developer documentation for Reachability.
  • Linux manual documentation for uname.
+ (NSString *)computeClientInformation {
        struct utsname u;
        uname(&u);

        NSString *hardware = [NSString stringWithCString:u.machine encoding:NSUTF8StringEncoding];

        UIDevice *device = [UIDevice currentDevice];

        NSString *deviceType;

        switch (UI_USER_INTERFACE_IDIOM()) {
            case UIUserInterfaceIdiomPhone:
                deviceType = @"MobilePhone";
                break;
            case UIUserInterfaceIdiomPad:
                deviceType = @"Tablet";
                break;
            case UIUserInterfaceIdiomTV:
                deviceType = @"TV";
                break;
            default:
                deviceType = @"Unknown";
        }

        CGRect screenRect = [[UIScreen mainScreen] bounds];
        NSNumber *screenWidth = @((float) screenRect.size.width);
        NSNumber *screenHeight = @((float) screenRect.size.height);

        Reachability *reachability = [Reachability reachabilityForInternetConnection];
        [reachability startNotifier];

        NetworkStatus status = [reachability currentReachabilityStatus];

        NSString *connectionType;

        if (status == NotReachable) {
            connectionType = @"notConnected";
        } else if (status == ReachableViaWiFi) {
            connectionType = @"WiFi";
        } else if (status == ReachableViaWWAN) {
            connectionType = @"cellular";
        }

        NSMutableDictionary *clientInformation = [@{
                @"type": deviceType,
                @"model": device.model,
                @"vendor": @"Apple",
                @"manufacturer": @"Apple",
                @"version": [hardware stringByReplacingOccurrencesOfString:device.model withString:@""],
                @"osName": device.systemName,
                @"osVersion": device.systemVersion,
                @"displayWidth": screenWidth,
                @"displayHeight": screenHeight,
                @"connectionType": connectionType,
                @"applicationId": @"REF30"
        } mutableCopy];

        NSError *error;
        NSData *jsonData = [NSJSONSerialization dataWithJSONObject:clientInformation options:NSJSONWritingPrettyPrinted error:&error];
        NSString *base64Encoded = [jsonData base64EncodedStringWithOptions:0];

        return base64Encoded;
}

The device information can be constructed the following way:

Key
Source
Value (example)
model
uname.machine
AppleTV
vendor
hardcoded
Apple
manufacturer
hardcoded
Apple
version
uname.machine
8,1
displayWidth
UIScreen.mainScreen
1920
displayHeight
UIScreen.mainScreen
1080
osName
UIDevice.systemName
tvOS
osVersion
UIDevice.systemVersion
10.2

The connection information can be constructed the following way:

Key
Source
Value (example)
connectionType
[Reachability currentReachabilityStatus]
connectionSecure

The application information can be constructed the following way:

Key
Source
Value (example)
applicationId
hardcoded
REF30

Fire OS

To build the X-Device-Info header for devices running Fire OS, you may refer to the following documents:

  • Android developer documentation for Build class.
  • Amazon developer documentation for Identifying Fire TV Devices.

The device information can be constructed the following way:

Key
Source
Value (example)
model
Build.MODEL
AFTM
vendor
Build.BRAND
Amazon
manufacturer
Build.MANUFACTURER
Amazon
version
Build.DEVICE
montoya
displayWidth
DisplayMetrics.widthPixels
displayHeight
DisplayMetrics.heightPixels
osName
hardcoded
Android
osVersion
Build.VERSION.RELEASE
5.1.1

The connection information can be constructed the following way:

Key
Source
Value (example)
connectionType
connectionSecure

The application information can be constructed the following way:

Key
Source
Value (example)
applicationId
hardcoded
REF30

Roku OS

To build the X-Device-Info header for devices running Roku OS, you may refer to the following documents:

  • Roku developer documentation for ifDeviceInfo.

The device information can be constructed the following way:

Key
Source
Value (example)
model
hardcoded
“Roku”
vendor
ifDeviceInfo.GetModelDetails().VendorName
“Sharp”, “Roku”
manufacturer
ifDeviceInfo.GetModelDetails().VendorName
“Sharp”, “Roku”
version
ifDeviceInfo.GetModelDetails().ModelNumber
“5303X”
displayWidth
ifDeviceInfo.GetDisplaySize().w
1920
displayHeight
ifDeviceInfo.GetDisplaySize().h
1080
osName
hardcoded
“Roku”
osVersion
ifDeviceInfo.getVersion()

The connection information can be constructed the following way:

Key
Source
Value (example)
connectionType
ifDeviceInfo.GetConnectionType()
“WifiConnection”, “WiredConnection”
connectionSecure
hardcoded
true if connection is wired

The application information can be constructed the following way:

Key
Source
Value (example)
applicationId
hardcoded
REF30

Others

For device platforms not covered in the documentation, the client information (device, connection and application) should be linked to any available hardware and operating system (OS) attributes, typically specified in the device’s hardware and OS manuals.

recommendation-more-help
3f5e655c-af63-48cc-9769-2b6803cc5f4b