Data
List findings
GET
/api/v1/projects/{id}/findings
Most recently seen first. Security findings are hidden if you lack the view-security permission.
- API key access
- Read only or read and write
- Project permission
- View health
- Success
- 200 — OK
Parameters
Path
| Parameter | Type | Notes |
|---|---|---|
id required |
string | Project id |
Query string
| Parameter | Type | Notes |
|---|---|---|
status |
"open" | "accepted" | "resolved" | "all" | default "open" |
severity |
"critical" | "high" | "medium" | "low" | |
kind |
string | e.g. missing-title, missing-header |
pageId |
string | |
page |
integer | default 1 · min 1 |
limit |
integer | default 50 · min 1 · max 100 |
Example request
Replace tk_live_YOUR_KEY with your API key and the ids with your own.
curl 'https://trackerv2.marketingplanet.global/api/v1/projects/6650a4c2e1b3d5f7a9c1e301/findings?status=open&severity=high' \
-H 'Authorization: Bearer tk_live_YOUR_KEY'
const response = await fetch('https://trackerv2.marketingplanet.global/api/v1/projects/6650a4c2e1b3d5f7a9c1e301/findings?status=open&severity=high', {
headers: {
Authorization: 'Bearer tk_live_YOUR_KEY',
},
});
const result = await response.json();
if (!response.ok) throw new Error(`${result.error.code}: ${result.error.message}`);
console.log(result.data);
import requests
response = requests.get(
"https://trackerv2.marketingplanet.global/api/v1/projects/6650a4c2e1b3d5f7a9c1e301/findings",
headers={"Authorization": "Bearer tk_live_YOUR_KEY"},
params={
"status": "open",
"severity": "high",
},
)
result = response.json()
if not response.ok:
raise RuntimeError(f"{result['error']['code']}: {result['error']['message']}")
print(result["data"])
Example response
{
"data": [
{
"id": "6652c6e4a3d5f7b9c1e3a502",
"pageId": null,
"kind": "missing-header",
"severity": "high",
"status": "open",
"summary": "Content-Security-Policy header is missing",
"finalUrl": null,
"firstSeenAt": "2026-09-01T09:00:00.000Z",
"lastSeenAt": "2026-10-06T09:25:12.000Z",
"acceptedAt": null,
"resolvedAt": null
}
],
"meta": {
"page": 1,
"limit": 50,
"total": 1
}
}
Response fields
| Field | Type | Notes |
|---|---|---|
data |
array of Finding | |
data[].id |
string | |
data[].pageId |
string or null | |
data[].kind |
string | |
data[].severity |
"critical" | "high" | "medium" | "low" | |
data[].status |
"open" | "accepted" | "resolved" | |
data[].summary |
string | |
data[].finalUrl |
string or null | |
data[].firstSeenAt |
string (date-time) | |
data[].lastSeenAt |
string (date-time) | |
data[].acceptedAt |
string (date-time) or null | |
data[].resolvedAt |
string (date-time) or null |
Errors
Besides the errors any request can return (bad or missing key, plan, scope, rate limit), this endpoint can return:
| Status | error.code | Meaning |
|---|---|---|
| 400 | invalid-request | A parameter or body field is missing or invalid; error.message says which. |
| 404 | not-found | The resource does not exist or you cannot open it. Tracker does not reveal which. |
| 403 | flag-viewHealth | Your project membership does not include viewing health. |
Errors always look like { "error": { "code": "…", "message": "…" } }. See Errors & limits.