An API that connects multiple Microsoft services, enabling data access and automation across platforms
The security/threatSubmission/emailThreats endpoint is functional, but it has strict requirements that commonly cause 401 responses if not met.
Key points required for successful calls:
- Correct endpoint and method
- List submissions:
GET /security/threatSubmission/emailThreats - Review a submission:
POST /security/threatSubmission/emailThreats/{emailThreatsId}/review
- Required permissions
- For listing email threat submissions (
GET /security/threatSubmission/emailThreats):- Delegated (work or school):
- Least privileged:
ThreatSubmission.Read - Higher:
ThreatSubmission.ReadWrite,ThreatSubmission.Read.All,ThreatSubmission.ReadWrite.All
- Least privileged:
- Application:
- Least privileged:
ThreatSubmission.Read.All - Higher:
ThreatSubmission.ReadWrite.All
- Least privileged:
- Delegated (work or school):
- For reviewing a submission (
POST .../review):- Delegated (work or school):
ThreatSubmission.ReadWrite.All - Application:
ThreatSubmission.ReadWrite.All
- Delegated (work or school):
- Personal Microsoft accounts are not supported.
If the access token does not include one of these exact Graph permissions, the API returns 401.
- Token and header requirements
- The request must include:
Authorization: Bearer {token} - The token must be issued for Microsoft Graph and contain the required
ThreatSubmission.*permission scopes/roles. - Using a Global Administrator account alone is not sufficient; the app or user must be granted and consented the specific ThreatSubmission permissions.
- Beta API constraints
- This API is under
/betaand is explicitly documented as not supported for production use. However, it is expected to work when called with the correct permissions and tokens.
If 401 is returned even for a Global Administrator, typical causes are:
- Missing or incorrect
ThreatSubmission.*permissions on the app registration. - Admin consent not granted for those permissions.
- Using a personal Microsoft account, which is not supported.
- Using a token for the wrong resource (not Microsoft Graph) or without the required scopes/roles.
References: