DeviceIdentifier API Python library
===================================
Utils to manipulate and learn from assorted device identifier formats
via Reincubate’s `DeviceIdentifier
API <https://www.reincubate.com/deviceidentifier-api/>`__.
Technical documentation is available on `Reincubate’s
site <https://docs.reincubate.com/deviceidentifier/?utm_source=github&utm_medium=deviceidentifier-py&utm_campaign=deviceidentifier>`__.
Getting started
---------------
Try these:
.. code:: bash
$ pip install deviceidentifier
Calls to the API through this client then become easy:
.. code:: python
from deviceidentifier import api
# Look up an Apple serial number
api.lookup( api.TYPE_APPLE_SERIAL, 'C8QH6T96DPNG' )
# Identify the type of an identifier
api.identify_identifier( 'iPhone5,3' )
# Triangulate a bunch of data from a collection of identifiers
api.enhance_metadata(
apple_identifier='iPhone5,3',
apple_serial='C8QH6T96DPNG',
gsma_imei='013554006297015',
gsma_iccid='8965880812100011146'
)
The API supports anonymous access, and provides limited, rate-limited
data when doing so. Tokens can be obtained by contacting
`Reincubate <mailto:enterprise@reincubate.com>`__, and either by setting
an environment variable:
.. code:: bash
$ export RI_DEVID_TOKEN='api-authentication-token'
Or by passing the token value directly into the code:
.. code:: python
from deviceidentifier import api
# Look up an Apple serial number
api.lookup( api.TYPE_APPLE_SERIAL, 'api-authenticaton-token', 'C8QH6T96DPNG' )
Using the command-line interface
--------------------------------
Apple
~~~~~
Apple serial numbers: legacy (80s & 90s), old (early 2000s) and post-2010 formats
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.. code:: bash
$ python -m deviceidentifier.cli.apple_serial C8QH6T96DPNG
.. code:: json
{
"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 model numbers
^^^^^^^^^^^^^^^^^^^
.. code:: bash
$ python -m deviceidentifier.cli.apple_model MC605FD/A
.. code:: json
{
"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
^^^^^^^^^^^^^^^^^
.. code:: bash
$ python -m deviceidentifier.cli.apple_identifier iPhone5,3
.. code:: json
{
"id": "iPhone5,3",
"image": {
"height": 330,
"url": "https://di-api.reincubate.com/resource-775ac9634280be8d7dfb0b75b4727f69/",
"width": 450
},
"product": {
"line": "iPhone",
"sku": "iPhone 5c"
},
"variant": "GSM + CDMA"
}
Apple internal names
^^^^^^^^^^^^^^^^^^^^
.. code:: bash
$ python -m deviceidentifier.cli.apple_internal_name N92AP
.. code:: json
{
"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
^^^^^^^^^^^^^^^^^
.. code:: bash
$ python -m deviceidentifier.cli.apple_idfa 002ebf12-a125-5ddf-a739-67c3c5d20177
.. code:: json
{
"anonymised": "••••••••-••••-••••-••••-••••••••••••",
"formatted": "002ebf12-a125-5ddf-a739-67c3c5d20177"
}
Apple UDIDs
^^^^^^^^^^^
.. code:: bash
$ python -m deviceidentifier.cli.apple_udid db72cb76a00cb81675f19907d4ac2b298628d83c
.. code:: json
{
"anonymised": "••••••••••••••••••••••••••••••••••••••••",
"compromised": false,
"formatted": "db72cb76a00cb81675f19907d4ac2b298628d83c"
}
Apple “A” numbers
^^^^^^^^^^^^^^^^^
.. code:: bash
python -m deviceidentifier.cli.apple_anumber A1784
.. code:: json
{
"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"
}
}
CDMA
~~~~
Mobile Equipment Identifier (MEIDs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.. code:: bash
$ python -m deviceidentifier.cli.cdma_meid 354403064522046
.. code:: json
{
"anonymised": "35440306••••••6",
"checksum": "6",
"id": "354403064522046",
"manufacturer": "440306",
"pESN": "808D1904",
"regionCode": {
"code": "35",
"group": "Comreg",
"origin": "Ireland"
},
"serial": "452204"
}
GSMA
~~~~
IMEIs (enriched with data from Apple’s GSX service for clients with access)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.. code:: bash
$ python -m deviceidentifier.cli.gsma_imei 013554006297015
.. code:: json
{
"anonymised": "01355400••••••5",
"checksum": "5",
"gsmaTac": {
"appleModel": {
"anonymised": "D298",
"appleIdentifier": {
"id": "iPhone5,2",
"image": {
"height": 330,
"url": "https://di-api.reincubate.com/resource-c2aac9e5e3695fca1090633a4ea1b60d/",
"width": 450
},
"product": {
"line": "iPhone",
"sku": "iPhone 5"
},
"variant": "CDMA + LTE"
},
"id": "D298",
"region": {
"flags": null,
"name": null
},
"specification": {
"case_size": "",
"colour": "White",
"material": "",
"storage": "16 GB"
},
"type": "Retail"
},
"id": "01355400",
"manufacturer": "Apple",
"product": {
"line": "iPhone",
"sku": "iPhone 5"
}
},
"gsx": {
"appleSerial": {
"anonymised": "F2TK4•••DTWF",
"configurationCode": {
"code": "DTWF",
"image": {
"height": 120,
"url": "https://di-api.reincubate.com/resource-4cb3c6fe7c62f327cd11712196c221b0/",
"width": 120
},
"skuHint": "iPhone 5 (GSM, CDMA)"
},
"coverageUrl": "https://checkcoverage.apple.com/gb/en?sn=F2TK4TZ7DTWF",
"id": "F2TK4TZ7DTWF",
"manufacturing": {
"city": "Zhengzhou",
"company": "Foxconn",
"country": "China",
"date": "2013-01-22",
"flag": "🇨🇳",
"id": "F2T"
},
"serialType": "2010",
"uniqueId": {
"productionNo": 32341,
"value": "TZ7"
}
},
"sale": {
"estimatedPurchaseDate": "2013-04-10",
"initialCarrier": "Sweden Tele2.",
"realPurchaseDate": "2013-04-10",
"saleRegion": "Sweden",
"saleRegionFlag": "🇸🇪",
"seller": "TELE2 SVERIGE AB"
},
"skuHint": "IPHONE 5",
"specifications": [
"WHITE",
"16GB",
"GSM"
],
"status": {
"appleId": null,
"coverage": "Out Of Warranty (No Coverage)",
"sim": "Locked"
}
},
"id": "013554006297015",
"reportingBodyIdentifier": {
"code": "01",
"group": "PTCRB",
"origin": "United States"
},
"serial": "629701",
"svn": null,
"type": "IMEI"
}
Type allocation codes (TAC)
^^^^^^^^^^^^^^^^^^^^^^^^^^^
.. code:: bash
$ python -m deviceidentifier.cli.gsma_tac 01326300
.. code:: json
{
"appleModel": {
"anonymised": "D198",
"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": "D198",
"region": {
"flags": "🇮🇳",
"name": "India"
},
"specification": {
"case_size": null,
"colour": "White",
"material": null,
"storage": "8 GB"
},
"type": "Retail"
},
"id": "01326300",
"manufacturer": "Apple",
"product": {
"line": "iPhone",
"sku": "iPhone 4"
}
}
ICCIDs
^^^^^^
.. code:: bash
$ python -m deviceidentifier.cli.gsma_iccid 8965880812100011146
.. code:: json
{
"anonymised": "896588••••••••••••6",
"atiiccid": null,
"checksum": "6",
"issuer": {
"code": "88",
"country": {
"code": "65",
"flag": "🇸🇬",
"name": "Singapore"
},
"name": null
},
"majorIndustry": {
"code": "89",
"industry": "Telecommunications administrations and private operating agencies",
"type": "Healthcare, telecommunications and other future industry assignments"
},
"month": "08",
"simNumber": "001114",
"switch": "10",
"year": "12"
}
Identifying an identifier
~~~~~~~~~~~~~~~~~~~~~~~~~
.. code:: bash
$ python -m deviceidentifier.cli.identify_identifier iPhone5,3
.. code:: json
{
"iPhone5,3": [
"apple_identifier"
]
}
Troubleshooting
---------------
See the `support & service
status <https://docs.reincubate.com/ricloud/status/?utm_source=github&utm_medium=deviceidentifier-py&utm_campaign=deviceidentifier>`__
page.
Need more functionality?
------------------------
Reincubate’s vision is to provide data access, extraction and recovery
technology for all app platforms - be they mobile, desktop, web,
appliance or in-vehicle.
The company was founded in 2008 and was first to market with both iOS
and iCloud data extraction technology. With over half a decade’s
experience helping law enforcement and security organisations access iOS
data, Reincubate has licensed software to government, child protection
and corporate clients around the world.
The company can help users with:
- iCloud access and data recovery
- Recovery of data deleted from SQLite databases
- Bulk iOS data recovery
- Forensic examination of iOS data
- Passcode, password, keybag and keychain analysis
- Custom iOS app data extraction
- Advanced PList, TypedStream and Mbdb manipulation
Contact
`Reincubate <https://www.reincubate.com/?utm_source=github&utm_medium=deviceidentifier-py&utm_campaign=deviceidentifier>`__
for more information.
Terms & license
---------------
See the ``LICENSE`` file for details on this implementation’s license.
Users must not use the API in any way that is unlawful, illegal,
fraudulent or harmful; or in connection with any unlawful, illegal,
fraudulent or harmful purpose or activity.