Security (report)
/api/v1/reports/securityRequest
/api/v1/reports/securitycurl -X GET 'https://app.mailyte.com/api/v1/reports/security' \
-H 'Authorization: Bearer mk_live_YOUR_API_KEY'const response = await fetch('https://app.mailyte.com/api/v1/reports/security', {
method: 'GET',
headers: {
Authorization: 'Bearer mk_live_YOUR_API_KEY',
},
});
const { data } = await response.json();import requests
response = requests.get(
"https://app.mailyte.com/api/v1/reports/security",
headers={"Authorization": "Bearer mk_live_YOUR_API_KEY"},
)
data = response.json()["data"]<?php
$response = Http::withToken('mk_live_YOUR_API_KEY')
->get('https://app.mailyte.com/api/v1/reports/security');
$data = $response->json('data');require "net/http"
require "json"
uri = URI("https://app.mailyte.com/api/v1/reports/security")
request = Net::HTTP::Get.new(uri)
request["Authorization"] = "Bearer mk_live_YOUR_API_KEY"
response = Net::HTTP.start(uri.hostname, uri.port, use_ssl: true) { |http| http.request(request) }Response
Success.
dataobjectobjectstringsecurity_reportgenerated_atstringWhen this response was computed, ISO 8601 UTC. Every report answers it, so "is this figure stale?" never depends on which report you asked.
periodobjectNull while `availability.state` is `unavailable`, which is every response today: there is no window because nothing was measured over one.
start_atstringend_atstringgranularitystringdayThe width of one `series` bucket. Always `day`: the `granularity` query parameter is accepted and ignored.
availabilityobjectWhether there is a detection engine behind these figures. Check this BEFORE reading `totals` -- the counts are null, not zero, while it says `unavailable`.
statestringavailable | unavailableToday always `unavailable`. No spam, malware or phishing detection data source exists yet in mailyte-api or the mail server.
reasonstringWhy the figures are unavailable. Null when they are not.
totalsobjectALL NULL today, and that is the point. This endpoint used to answer `available: false` and then report zero spam, zero malware and zero phishing -- which is not "no data", it is a clean bill of health. A customer charting it saw a flat green line and a customer alerting on it never alerted. Null says "we have not measured"; treat it as unknown, never as none.
scannedintegerMessages put through spam, malware and phishing detection. Null means the figure is unavailable, never that it is zero.
spamintegerMessages detection classified as spam. Null means the figure is unavailable, never that it is zero.
malwareintegerMessages detection found malware in. Null means the figure is unavailable, never that it is zero.
phishingintegerMessages detection classified as phishing. Null means the figure is unavailable, never that it is zero.
seriesarray<object>Null while `availability.state` is `unavailable`, which is always. Nothing produces security trend rows, so publishing `[]` would assert there were no incidents. When a detection engine exists these rows will carry the section's standard `start_at` plus the counts above; only `availability.state` and the nulls change.
Returned inside the standard envelope.
Errors
| Status | When |
|---|---|
401 | The API key is missing, unknown, revoked or expired. All four answer identically, on purpose: distinguishing them would confirm which keys exist. |
403 | The key is valid but may not do this: it lacks the required scope, its IP allowlist does not include you, or this endpoint does not accept API keys. |
404 | No such resource in this organization. |
422 | The request was understood but the values were not acceptable. |
429 | Too many requests, or the organization has spent its sending allowance. `Retry-After` says how long to wait. |
Every status, with what causes it and what to do, is on the error reference.