Apple identifiers

Note

The examples in this document are shown using the DeviceIdentifier Python client library.

Conflicts in Apple’s identifier terminology

A number of the identifier names that Apple uses are re-used by them in different contexts. For instance, whilst an Apple product’s box may say its model is MC922LL/A, Apple’s “Identify your iPhone model” page only references identifiers with the format A1865. These are completely different IDs. Similarly, if one is using iTunes to learn about a device, it could state the “model identifier” as iPhone10,6, which is yet a third type of identifier.

As if that weren’t confusing enough, Apple’s internal names are referred to as “board ID”s in some areas by Apple and the Open Source community. However, this is not the same as the BOaRD ID or the logic board ID that Macs use (eg. Mac-F4208DC8), and as such the API adheres to “internal name” rather than the thrice-defined “board ID”.

Apple serial numbers

The API supports all three of Apple’s major serial number formats: legacy, 2000 and 2010.

An example legacy serial is F4412SAM0001, which was for the early 128k Mac. 84021NCV3NP is a 2000 serial, and C8QH6T96DPNG is 2010.

https://di-api.reincubate.com/v1/apple-serials/C8QH6T96DPNG/

$ python -m deviceidentifier.cli.apple_serial C8QH6T96DPNG
{
    "anonymised": "C8QH6•••DPNG",
    "configurationCode": {
        "code": "DPNG",
        "image": {
            "height": 120,
            "url": "https://di-api.reincubate.com/resource-159c9e87a3d6bbf5075bb030fa2925a0/",
            "width": 120
        },
        "skuHint": "iPhone 4 CDMA (8GB)"
    },
    "coverageUrl": "https://checkcoverage.apple.com/gb/en?sn=C8QH6T96DPNG",
    "id": "C8QH6T96DPNG",
    "manufacturing": {
        "city": "",
        "company": "",
        "country": "China",
        "date": "2012-02-05",
        "flag": "🇨🇳",
        "id": "C8Q"
    },
    "serialType": "2010",
    "uniqueId": {
        "productionNo": 31524,
        "value": "T96"
    }
}

Apple MLB serial numbers

The API supports Apple’s main logic board (MLB) serial formats, for both 13 and 17 digit codes..

https://di-api.reincubate.com/v1/apple-mlb-serials/C02443500KZG2QDA7/

$ python -m deviceidentifier.cli.apple_mlb_serial C02443500KZG2QDA7
{
    "anonymised": "C02443•••KZ••••••",
    "boardType": "500",
    "cc": "KZ",
    "eeeCode": "G2QD",
    "id": "C02443500KZG2QDA7",
    "kk": "A7",
    "productionPlant": {
        "city": "",
        "company": "Tech Com, Quanta Computer Susidiary",
        "country": "China",
        "date": "2014-10-22",
        "flag": "🇨🇳",
        "id": "C02"
    },
    "serialType": "2010",
    "uniqueId": {
        "id": null,
        "productionNo": null
    }
}

Apple model numbers

Apple model numbers can be presented with or without their regional or sale type encoding.

They can reveal the sale region of a device, as well as whether it was sold at retail, refurbished, or personalised.

https://di-api.reincubate.com/v1/apple-models/MC605FD%2FA/

$ python -m deviceidentifier.cli.apple_model MC605FD/A
{
    "anonymised": "C605",
    "appleIdentifier": {
        "id": "iPhone3,1",
        "image": {
            "height": 330,
            "url": "https://di-api.reincubate.com/resource-26b007e1007180a28e272036775a48a0/",
            "width": 450
        },
        "product": {
            "line": "iPhone",
            "sku": "iPhone 4"
        },
        "variant": "GSM"
    },
    "id": "C605",
    "region": {
        "flags": "🇦🇹🇱🇮🇨🇭",
        "name": "Austria, Liechtenstein, Switzerland"
    },
    "specification": {
        "case_size": "",
        "colour": "Black",
        "material": "",
        "storage": "32 GB"
    },
    "type": "Retail"
}

Apple identifiers

Apple identifiers are their core, top-level model identifier, such as iPhone9,3.

https://di-api.reincubate.com/v1/apple-identifiers/iPhone9,3/

$ python -m deviceidentifier.cli.apple_identifier iPhone9,3
{
    "id": "iPhone9,3",
    "image": {
        "height": 330,
        "url": "https://di-api.reincubate.com/resource-d8c14fc2a4dfcf27d5a217fb5e4c0cc4/",
        "width": 450
    },
    "product": {
        "line": "iPhone",
        "sku": "iPhone 7"
    },
    "specs_page": "https://support.apple.com/kb/SP743",
    "value": {
        "official_tradein": {
            "link": "https://www.apple.com/shop/trade-in",
            "value": "$175.00"
        }
    },
    "variant": "GSM"
}

Apple internal names

Internal names are Apple’s internal model numbers, like N90AP. They are sometimes referred to as BoardConfig.

https://di-api.reincubate.com/v1/apple-internal-names/N92AP/

$ python -m deviceidentifier.cli.apple_internal_name N92AP
{
    "appleIdentifier": {
        "id": "iPhone3,3",
        "image": {
            "height": 330,
            "url": "https://di-api.reincubate.com/resource-1e7820cb714e3d477534f291c0f87e83/",
            "width": 450
        },
        "product": {
            "line": "iPhone",
            "sku": "iPhone 4"
        },
        "variant": "CDMA"
    }
}

Apple IDFA / IDFV

identifierForAdvertiser (IDFA) and identifierForVendor (IDFV) values replaced the UDID after iOS 5. They are set per application, or per vendor.

Apple state this of the IDFA:

iOS 6 introduces the Advertising Identifier, a non-permanent, non-personal device identifier, that advertising networks will use to give you more control over advertisers’ ability to use tracking methods. If you choose to limit ad tracking, advertising networks using the Advertising Identifier may no longer gather information to serve you targeted ads. In the future all advertising networks will be required to use the Advertising Identifier. However, until advertising networks transition to using the Advertising Identifier you may still receive targeted ads from other networks.

And this for the IDFV:

An alphanumeric string that uniquely identifies a device to the app’s vendor. (read-only)

The value of this property is the same for apps that come from the same vendor running on the same device. A different value is returned for apps on the same device that come from different vendors, and for apps on different devices regardless of vendor.

Ole Begemann has written more on the migration from UDID.

https://di-api.reincubate.com/v1/apple-idfas/002ebf12-a125-5ddf-a739-67c3c5d20177/

$ python -m deviceidentifier.cli.apple_idfa 002ebf12-a125-5ddf-a739-67c3c5d20177
{
    "anonymised": "••••••••-••••-••••-••••-••••••••••••",
    "formatted": "002ebf12-a125-5ddf-a739-67c3c5d20177"
}

Apple UDIDs

Apple usually uses this ID to associate a device with an iCloud ID. This also holds the Find My iPhone activation status.

The UDID was deprecated in iOS 5. It is a composite non-reversible identifier build from IMEI, ECID and MAC values.

https://di-api.reincubate.com/v1/apple-udids/db72cb76a00cb81675f19907d4ac2b298628d83c/

$ python -m deviceidentifier.cli.apple_udid db72cb76a00cb81675f19907d4ac2b298628d83c
{
    "anonymised": "••••••••••••••••••••••••••••••••••••••••",
    "compromised": false,
    "formatted": "db72cb76a00cb81675f19907d4ac2b298628d83c"
}

Apple “A” numbers

Apple describe these for each phone on their “Identify your iPhone model” page.

https://di-api.reincubate.com/v1/apple-anumbers/A1784/

python -m deviceidentifier.cli.apple_anumber A1784
{
    "appleIdentifier": {
        "id": "iPhone9,4",
        "image": {
            "height": 330,
            "url": "https://di-api.reincubate.com/resource-d8c14fc2a4dfcf27d5a217fb5e4c0cc4/",
            "width": 450
        },
        "product": {
            "line": "iPhone",
            "sku": "iPhone 7 Plus"
        },
        "variant": "GSM"
    }
}

Apple GSX data

Data from the GSX service is exposed through the IMEI mechanism.