This endpoint gives access to the list of security findings found when scanning the mobile apps.
See the Introduction for an overview of the API and information relevant to all API operations.
There are two types of security findings in the Data Theorem portal:
The findings can be found in the following sections in the portal:
App Issues findings are shown as a single card when looking at an app’s issues:
App Protection findings are similarly shown as a single card when looking at an app’s protection tasks:
Findings have importance tags that are used internally by our service to characterize security findings. We expose these importance tags through the Mobile Security Results API because they can provide valuable insights to end-users. For example:
GOOGLE_P1
and APPLE_P1
tags.DEFENSE_IN_DEPTH
and SERVER_SIDE
tags can be used to identify server-side App Protection issues.Note: new kinds of importance tags may be added at any time. Integrations that use the Results API should be able to handle newly released tags.
We also return CVSS 3.1 scores and vectors as part of the response in the cvss3_score
and cvss3_vector
fields.
Certain security finding fields take on predefined values:
status_group
CLOSED
OPEN
aggregated_status
OPEN
NEW
CLOSED_FIXED
CLOSED_PARTIALLY_FIXED
CLOSED_WONT_FIX
CLOSED_BY_POLICY
CLOSED_RISK_ACCEPTED
CLOSED_COMPENSATING_CONTROL
CLOSED_ITEM_NOT_FOUND
OPEN_READY_TO_RESCAN
priority
P0
P1
P2
P3
P4
severity
HIGH
MEDIUM
LOW
category
DATA_AT_REST_EXPOSURE
DATA_IN_TRANSIT_EXPOSURE
DATA_LOSS_TO_HACKERS
DATA_EXPOSURE_TO_THIRD_PARTY_APPS
UNAUTHORIZED_DATA_COLLECTION
exploitability
DIFFICULT
MODERATE
EASY
compliance_policy
GDPR
PCI
HIPAA
FTC
OWASP
CALOPPA
COPPA
VPPA
CCPA
Non-exhaustive list of compliance_criterion values, subject to revision:
OWASP_A1_2019
OWASP_A2_2019
OWASP_A3_2019
OWASP_A4_2019
OWASP_A5_2019
OWASP_A6_2019
OWASP_A7_2019
OWASP_A8_2019
OWASP_A9_2019
OWASP_A10_2019
OWASP_A1_2023
OWASP_A2_2023
OWASP_A3_2023
OWASP_A4_2023
OWASP_A5_2023
OWASP_A6_2023
OWASP_A7_2023
OWASP_A8_2023
OWASP_A9_2023
OWASP_A10_2023
OWASP_W1_2021
OWASP_W2_2021
OWASP_W3_2021
OWASP_W4_2021
OWASP_W5_2021
OWASP_W6_2021
OWASP_W7_2021
OWASP_W8_2021
OWASP_W9_2021
OWASP_W10_2021
OWASP_R1_2011
OWASP_R2_2011
OWASP_R3_2011
OWASP_R4_2011
OWASP_R5_2011
OWASP_R6_2011
OWASP_R7_2011
OWASP_R8_2011
OWASP_R9_2011
OWASP_R10_2011
OWASP_M1_2014
OWASP_M2_2014
OWASP_M3_2014
OWASP_M4_2014
OWASP_M5_2014
OWASP_M6_2014
OWASP_M7_2014
OWASP_M8_2014
OWASP_M9_2014
OWASP_M10_2014
OWASP_M1_2016
OWASP_M2_2016
OWASP_M3_2016
OWASP_M4_2016
OWASP_M5_2016
OWASP_M6_2016
OWASP_M7_2016
OWASP_M8_2016
OWASP_M9_2016
OWASP_M10_2016
OWASP_M1_2024
OWASP_M2_2024
OWASP_M3_2024
OWASP_M4_2024
OWASP_M5_2024
OWASP_M6_2024
OWASP_M7_2024
OWASP_M8_2024
OWASP_M9_2024
OWASP_M10_2024
OWASP_MSTG_ARCH_1
OWASP_MSTG_ARCH_2
OWASP_MSTG_ARCH_3
OWASP_MSTG_STORAGE_1
OWASP_MSTG_STORAGE_2
OWASP_MSTG_STORAGE_3
OWASP_MSTG_STORAGE_4
OWASP_MSTG_STORAGE_5
OWASP_MSTG_STORAGE_6
OWASP_MSTG_STORAGE_7
OWASP_MSTG_STORAGE_8
OWASP_MSTG_STORAGE_9
OWASP_MSTG_STORAGE_10
OWASP_MSTG_STORAGE_11
OWASP_MSTG_STORAGE_12
OWASP_MSTG_STORAGE_13
OWASP_MSTG_CRYPTO_1
OWASP_MSTG_CRYPTO_2
OWASP_MSTG_CRYPTO_3
OWASP_MSTG_CRYPTO_4
OWASP_MSTG_CRYPTO_5
OWASP_MSTG_CRYPTO_6
OWASP_MSTG_AUTH_1
OWASP_MSTG_AUTH_2
OWASP_MSTG_AUTH_3
OWASP_MSTG_AUTH_4
OWASP_MSTG_AUTH_5
OWASP_MSTG_AUTH_6
OWASP_MSTG_AUTH_7
OWASP_MSTG_NETWORK_1
OWASP_MSTG_NETWORK_2
OWASP_MSTG_NETWORK_3
OWASP_MSTG_NETWORK_4
OWASP_MSTG_NETWORK_5
OWASP_MSTG_PLATFORM_1
OWASP_MSTG_PLATFORM_2
OWASP_MSTG_PLATFORM_3
OWASP_MSTG_PLATFORM_4
OWASP_MSTG_PLATFORM_5
OWASP_MSTG_PLATFORM_6
OWASP_MSTG_PLATFORM_7
OWASP_MSTG_CODE_1
OWASP_MSTG_CODE_2
OWASP_MSTG_CODE_3
OWASP_MSTG_CODE_4
OWASP_MSTG_CODE_5
OWASP_MSTG_CODE_6
OWASP_MSTG_CODE_7
OWASP_MSTG_CODE_8
OWASP_MSTG_CODE_9
OWASP_ASVS_V_1_2
OWASP_ASVS_V_1_4
OWASP_ASVS_V_1_5
OWASP_ASVS_V_1_6
OWASP_ASVS_V_1_7
OWASP_ASVS_V_1_9
OWASP_ASVS_V_1_12
OWASP_ASVS_V_1_14
OWASP_ASVS_V_2_1
OWASP_ASVS_V_2_2
OWASP_ASVS_V_2_3
OWASP_ASVS_V_2_5
OWASP_ASVS_V_2_6
OWASP_ASVS_V_2_7
OWASP_ASVS_V_2_8
OWASP_ASVS_V_2_10
OWASP_ASVS_V_3_1
OWASP_ASVS_V_3_2
OWASP_ASVS_V_3_3
OWASP_ASVS_V_3_4
OWASP_ASVS_V_3_5
OWASP_ASVS_V_3_7
OWASP_ASVS_V_4_1
OWASP_ASVS_V_4_2
OWASP_ASVS_V_4_3
OWASP_ASVS_V_5_1
OWASP_ASVS_V_5_2
OWASP_ASVS_V_5_3
OWASP_ASVS_V_5_4
OWASP_ASVS_V_5_5
OWASP_ASVS_V_6_4
OWASP_ASVS_V_7_4
OWASP_ASVS_V_8_1
OWASP_ASVS_V_8_2
OWASP_ASVS_V_8_3
OWASP_ASVS_V_9_1
OWASP_ASVS_V_9_2
OWASP_ASVS_V_10_2
OWASP_ASVS_V_10_3
OWASP_ASVS_V_11_1
OWASP_ASVS_V_12_1
OWASP_ASVS_V_12_3
OWASP_ASVS_V_12_5
OWASP_ASVS_V_12_6
OWASP_ASVS_V_13_1
OWASP_ASVS_V_13_2
OWASP_ASVS_V_13_3
OWASP_ASVS_V_13_4
OWASP_ASVS_V_14_1
OWASP_ASVS_V_14_2
OWASP_ASVS_V_14_3
OWASP_ASVS_V_14_4
OWASP_ASVS_V_14_5
OWASP_MASVS_PRIVACY_1
OWASP_MASVS_PRIVACY_2
OWASP_MASVS_PRIVACY_3
OWASP_MASVS_PRIVACY_4
PCI_DSS_v3_2_1_a1_2_1
PCI_DSS_v3_2_1_a1_3
PCI_DSS_v3_2_1_aA_2_1
PCI_DSS_v3_2_1_a2_2_3
PCI_DSS_v3_2_1_a2_3
PCI_DSS_v3_2_1_a4_1
PCI_DSS_v3_2_1_a6_1
PCI_DSS_v3_2_1_a6_5_10
PCI_DSS_v3_2_1_a6_6
PCI_DSS_v3_2_1_a3_4
PCI_DSS_v3_2_1_a10_1
PCI_DSS_v3_2_1_a8_7
NIST_800_53_AC_1
NIST_800_53_AC_4
NIST_800_53_AU_11
NIST_800_53_SA_2
NIST_800_53_SA_4
NIST_800_53_SC_1
NIST_800_53_SC_7
NIST_800_53_SC_12
NIST_800_53_SC_16
NIST_800_53_SI_1
NIST_800_53_SI_2
NIST_800_53_CM_2
NIST_800_53_CM_4
FFIEC_VC2_REQUIREMENT_1
FFIEC_VC2_REQUIREMENT_2
FFIEC_VC2_REQUIREMENT_3
FFIEC_VC2_REQUIREMENT_4
FFIEC_VC2_REQUIREMENT_5
FFIEC_VC2_REQUIREMENT_6
FFIEC_VC2_REQUIREMENT_7
FFIEC_VC2_REQUIREMENT_8
FFIEC_VC2_REQUIREMENT_9
CIS_BENCHMARK_GOOGLE_CLOUD_PLATFORM_1
CIS_BENCHMARK_GOOGLE_CLOUD_PLATFORM_3
CIS_BENCHMARK_GOOGLE_CLOUD_PLATFORM_4
CIS_BENCHMARK_GOOGLE_CLOUD_PLATFORM_5
CIS_BENCHMARK_GOOGLE_CLOUD_PLATFORM_6
CIS_BENCHMARK_KUBERNETES_1
CIS_BENCHMARK_KUBERNETES_3
CIS_BENCHMARK_KUBERNETES_5
CIS_BENCHMARK_AWS_1
CIS_BENCHMARK_AWS_2
CIS_BENCHMARK_AWS_3
CIS_BENCHMARK_AZURE_3
CIS_BENCHMARK_AZURE_4
CIS_BENCHMARK_AZURE_6
CIS_BENCHMARK_AZURE_7
CIS_BENCHMARK_AZURE_8
CIS_BENCHMARK_AZURE_9
FEDRAMP_V5_API_SECURITY_SAST
FEDRAMP_V5_API_SECURITY_DAST
CALOPPA_22575
CCPA_0
COPPA_0
FTC_2014_3
FTC_2016_3
FTC_2016_6
FTC_2016_8
FTC_2017_2
FTC_2017_8
FTC_2018_1
FTC_2023_2
FTC_2017_1
FTC_1523054
GDPR_0
GDPR_1
GDPR_2
HIPAA_0
MITRE_CWE_926
MITRE_T1412
MITRE_T1417
MITRE_T1436
MITRE_T1439
MITRE_T1463
MITRE_T1635_1
MITRE_T1429
MITRE_T1430
MITRE_T1404
MITRE_T1413
MITRE_T1417_2
MITRE_T1414
MITRE_T1474
MITRE_T1409
MITRE_T1415
MITRE_T1476
MITRE_T1466
MITRE_T1470
MITRE_T1468
MITRE_T1469
MITRE_T1408
PCI_SSC_TLS_REQUIREMENT_0
PCI_DSS_v3_2_1_s8_2
VPPA_0
Non-exhaustive list of importance_tags values, subject to revision:
APP_STORE_PRIVACY
: Issues relevant to the App Store Answers toolkitAPPLE_P1
: Apple App Store blockersCOFFEE_SHOP_COMPROMISE
: Issues relevant to the Coffee Shop Compromise toolkitCUSTOMER_POLICY
: Configurable issues. Eg, Presence of SDKs that are on an SDK deny-list.DATA_LEAKS
: Issues that represent “data leaks” in the appDEFENSE_IN_DEPTH
: App Protection issues. Represents an available defense-in-depth protection or mitigation that has not been implementedGOOGLE_P1
: Google Play Store blockersKEYS_TO_THE_KINGOM
: Issues relevant to the Keys to the Kingdom toolkitPRIVACY
: Issues related to user privacySECURITY
: Security issuesSECURITY_P1
: Automatically categorized by Data Theorem as a Security P1 (user can override by changing the issue’s priority)SERVER_SIDE
: Issues about services used by the appThis endpoint provides a JSON object with a security_findings
and a pagination_information
keys. The
security_findings
key contains a summary of all issues within a Data Theorem’s customer’s apps while the
pagination_information
key provides cursor based pagination details for the JSON object response.
In addition to the issues data, the JSON object contains links to other API resources related to the current resource and a link to the issue on the customer facing portal.
The JSON object response can be filtered based on the following query parameters:
field | type | description |
---|---|---|
cursor | string | pagination cursor as provided by the previous page |
mobile_app_id | integer | select issues with for the given mobile app ID |
results_since | string | select issues with changes no less recent than the provided date, expects ISO 8601 date format |
status_group | string | select issues with the given status group, accepts values listed above |
issue_type_id | UUID | select issues with the given issue type ID |
These fields may be included in the JSON response depending on the security finding:
field | type | description |
---|---|---|
associated_cve_ids | list of strings | A list of CVEs which are related to the security finding |
associated_cwe_ids | list of strings | A list of CWEs which are related to the security finding |
1 | GET https://api.securetheorem.com/apis/mobile_security/results/v2/security_findings |
1 | { |
This endpoint provides a JSON object which contains a summary of a specific issue within a DataTheorem’s customer’s
app specified by a security_finding_id
.
Preconditions:
1 | GET https://api.securetheorem.com/apis/mobile_security/results/v2/security_findings/:security_finding_id |
1 | { |
This endpoint updates a security finding and provides a JSON object which contains a summary of the updated issue
within the DataTheorem’s customer’s app specified by security_finding_id
.
Preconditions:
The request may update the following fields:
priority
: The issue priority.1 | PATCH https://api.securetheorem.com/apis/mobile_security/results/v2/security_findings/:security_finding_id |
1 | { |
This endpoint provides a means of closing a security finding specified by security_finding_id
.
The given text description of the reason will be posted in a closing comment.
When a security finding is closed using this API operation, all open targets in that finding will be closed and the finding’s aggregated_status field will be updated with the most appropriate CLOSED_*
status value.
To prevent any future scans from opening new targets, you can “permanently close” the finding by specifying "is_permanently_closed": true
in the request body.
Otherwise, if the issue occurs somewhere else in a new build/release of the app, a new target may be opened.
Returns a 200 status code upon success with the updated security finding in the request body.
Preconditions:
results_api.can_close_issues
permissionThe endpoint expects a JSON object to be passed in the request body.
Field | Required | Type | Description |
---|---|---|---|
aggregated_status |
✔️ | string | Status to set on the security finding, one of "CLOSED_WONT_FIX" , "CLOSED_RISK_ACCEPTED" , "CLOSED_COMPENSATING_CONTROL" |
is_permanently_closed |
boolean | Whether the security should be closed permanently, defaults to false |
|
reason |
✔️ | string | Arbitrary text, will appear in the closing comment |
1 | POST https://api.securetheorem.com/apis/mobile_security/results/v2/security_findings/:security_finding_id/close |
1 | { |
This API operation can create a new comment on an existing security finding. The new comment will be from the API Key
itself (the author_email
field is set to the API Key’s “name” rather than to an email address), and by default the
comment is considered to be an “internal comment” or internal note. If a comment is intended as a question for Data
Theorem support, set is_question_for_datatheorem
to true
in the request body.
Upon success a 204 status code is returned with an empty response body.
Preconditions:
results_api.can_comment_on_issues
permissionThe endpoint expects a JSON object to be passed in the request body.
Field | Required | Type | Description |
---|---|---|---|
text |
✔️ | string | Arbitrary text, the contents of the comment |
is_question_for_datatheorem |
bool | Set this to true if the comment is a question directed at Data Theorem support. If omitted, defaults to false, meaning that the comment is an internal comment. |
1 | POST https://api.securetheorem.com/apis/mobile_security/results/v2/security_findings/:security_finding_id/notes |
JSON body:
1 | { |
{
"author_email": "some@example.com",
"date_created": "2016-11-02T19:25:16.664990-00:00",
"id": "1234",
"is_internal_comment": "true",
"is_question_for_datatheorem": "false",
"is_reply_from_datatheorem": "false",
"text": "Lorem ipsum dolor sit amet."
}