This API is provided as is and Exodus Privacy or its members could not be responsive in any case.
This API is globally limited to 30 requests/second (with a 50 requests burst). Some endpoints have stricter limits, please read each endpoint documentation.
The εxodus API results are made available under the Open Database License: http://opendatacommons.org/licenses/odbl/1.0/. Any rights in individual contents of the database are licensed under the Database Contents License: http://opendatacommons.org/licenses/dbcl/1.0/.
We don't provide API keys to companies or for end users products production usage (android apps, etc). For this kind of usage we encourage you to deploy your own Exodus instance.
In order to use this REST API, you have to request an API key.
To do so, please send an email specifying:
- a username
- an email address (in order to tell you if something wrong has been done with your key)
- a short description of your project
- the IP address with which you will make the requests if it's a static one (to avoid blocking)
- if you need more than 30 requests/second rate
Send your request to api@exodus-privacy.eu.org. Then, you will receive your API key.
For clients to authenticate, the API key should be included in the Authorization HTTP header. The key should be prefixed by the string literal "Token", with whitespace separating the two strings. For example:
Authorization: Token 9944b09199c62bcf9418ad846dd0e4bbdfc6ee4bBecause we can ban some default user agents of specific tools, please set your user agent to something related to your username.
We recommend a syntax like <username>/<version>. For example, if your username is i-hate-ai, you can set your user agent to i-hate-ai/1.0.
The API is served by the URL https://reports.exodus-privacy.eu.org/
GET /api/trackers returns JSON
{
"trackers": {
"69": {
"name": "Facebook Places",
"network_signature": "\\.facebook\\.com",
"code_signature": "com.facebook.places",
"creation_date": "2017-12-05",
"website": "https://developers.facebook.com/docs/android",
"description": "",
"categories": ["Analytics", "Ads"],
"documentation": ["https://developers.facebook.com/docs/graph-api/reference/page/locations/"]
},
[edited]
}
}Limit: 3 requests/IP per minute.
The result of this endpoint does not change often.
GET /api/trackers/count returns JSON
{
"count": 400
}GET /api/applications returns JSON
{
"applications": [
{
"id": 1,
"handle": "com.johnson.nett",
"name": "Calendrier des r\\u00e8gles NETT \\u00ae",
"creator": "JOHNSON & JOHNSON SANTE BEAUTE FRANCE",
"downloads": "50,000+ downloads",
"app_uid": "C585E0D6274EDA2FA159542E305D2C61963BA8CC",
"source": "google",
"icon_phash": "103278408296944969572136665785814778239",
"report_updated_at": 1568136675.813601
},
{
"id": 2,
"handle": "cdiscount.mobile",
"name": "Cdiscount : N'\\u00e9conomisez pas votre plaisir",
"creator": "Cdiscount",
"downloads": "1,000,000+ downloads",
"app_uid": "9F4CCA45C68B96EACD9D012F0902F406126FF660",
"source": "google",
"icon_phash": "320076679825009360506916699520458898952",
"report_updated_at": 1575063216.526062
},
{
"id": 3,
"handle": "ch.hug_ge.emoteo",
"name": "Emoteo",
"creator": "HUG H\\u00f4pitaux universitaires de Gen\\u00e8ve",
"downloads": "1,000+ downloads",
"app_uid": "22ECA4EC976CC4FB11C6A0A24B2A90769E5F1A64",
"source": "google",
"icon_phash": "216013393868481183094163051465356731136",
"report_updated_at": 1587278984.683278
},
[edited]
]
}GET /api/applications?option=short returns JSON
{
"applications": [
{
"id": 1,
"handle": "com.johnson.nett",
"app_uid": "C585E0D6274EDA2FA159542E305D2C61963BA8CC",
"source": "google"
},
{
"id": 2,
"handle": "cdiscount.mobile",
"app_uid": "9F4CCA45C68B96EACD9D012F0902F406126FF660",
"source": "google"
},
{
"id": 3,
"handle": "ch.hug_ge.emoteo",
"app_uid": "22ECA4EC976CC4FB11C6A0A24B2A90769E5F1A64",
"source": "google"
},
[edited]
]
}GET /api/applications?tracker=<tracker_id> returns JSON
{
"applications": [
{
"id": 1,
"handle": "com.johnson.nett",
"app_uid": "C585E0D6274EDA2FA159542E305D2C61963BA8CC",
"source": "google"
},
[edited]
]
}GET /api/applications/count returns JSON
{
"count": 115000
}GET /api/search/com.app.handle returns JSON
Replace com.app.handle with the application handle.
{
"app.greyshirts.firewall": {
"name": "NoRoot Firewall",
"reports": [
{
"updated_at": "2017-12-28T01:17:50.638Z",
"downloads": "1,000,000+ downloads",
"trackers": [27],
"creation_date": "2017-12-28T01:17:50.605Z",
"version_code": "41",
"version": "3.0.1",
"source": "google",
"id": 57
}
],
"creator": "Grey Shirts"
}
}GET /api/search/com.app.handle/details returns JSON
Replace com.app.handle with the application handle.
[{
"handle": "org.smssecure.smssecure",
"app_name": "",
"uaid": "A3509D616FEEF571171CFF5FA2C5E52AB14B0F2E",
"version_name": "0.15.8",
"version_code": "137",
"source": "google",
"icon_hash": "133488413146636779444378132657184449536",
"apk_hash": "a0725666e702b76653dc600430a7e87ecee9e9e7c07c02a88391bcbf60adb652",
"created": "2017-11-24T17:06:54.048Z",
"updated": "2021-03-13T15:56:54.357Z",
"report": 380,
"creator": "",
"downloads": "",
"trackers": [],
"permissions": [
"org.smssecure.smssecure.ACCESS_SECRETS",
"android.permission.READ_PROFILE",
"android.permission.WRITE_PROFILE",
"android.permission.READ_CONTACTS",
"android.permission.WRITE_CONTACTS",
"android.permission.RECEIVE_SMS",
"android.permission.RECEIVE_MMS",
"android.permission.READ_SMS",
"android.permission.SEND_SMS",
"android.permission.WRITE_SMS",
"android.permission.VIBRATE",
"android.permission.ACCESS_NETWORK_STATE",
"android.permission.CHANGE_NETWORK_STATE",
"android.permission.READ_PHONE_STATE",
"android.permission.WAKE_LOCK",
"android.permission.INTERNET",
"android.permission.WRITE_EXTERNAL_STORAGE",
"android.permission.READ_EXTERNAL_STORAGE"
]
},
...]GET /api/reports/count returns JSON
{
"count": 225000
}