This section covers project endpoints in the Reporting API.
GET /reporting/projects
List all projects accessible to the authenticated user.
Parameters
| Name | Type | Description |
|---|---|---|
per_page |
integer | Items per page (default: 25). |
cursor |
string | Pagination cursor from links.next or meta.next_cursor. |
fields |
string | Comma-separated list of fields to include (e.g., project_id,name). |
Sample Response
{
"data": [
{
"project_id": 33082,
"name": "Demo Project",
"locations": "01001,Massachusetts,United States",
"check_frequency": 24
}
],
"meta": {
"per_page": [
25,
25
],
"next_cursor": "eyJwcm9qZWN0cy5pZCI6MzMwODIsIl9wb2ludHNUb05leHRJdGVtcyI6dHJ1ZX0",
"prev_cursor": null,
"has_more": true,
"path": "https://v2.serpwatch.io/api/reporting/projects"
},
"links": {
"first": null,
"last": null,
"prev": null,
"next": "https://v2.serpwatch.io/api/reporting/projects?cursor=eyJwcm9qZWN0cy5pZCI6MzMwODIsIl9wb2ludHNUb05leHRJdGVtcyI6dHJ1ZX0"
}
}
Sample Code
curl -X GET "https://v2.serpwatch.io/api/reporting/projects" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Accept: application/json"
const response = await fetch("https://v2.serpwatch.io/api/reporting/projects", {
headers: {
Authorization: "Bearer YOUR_API_KEY",
Accept: "application/json"
}
});
const data = await response.json();
console.log(data);
$client = new GuzzleHttp\Client();
$response = $client->get("https://v2.serpwatch.io/api/reporting/projects", [
"headers" => [
"Authorization" => "Bearer YOUR_API_KEY",
"Accept" => "application/json",
]
]);
$data = json_decode($response->getBody(), true);
GET /reporting/projects/{id}
Get detailed project information with summary statistics.
Parameters
| Name | Type | Description |
|---|---|---|
include |
string | Embed related resources (e.g., keywords). |
fields |
string | Comma-separated list of fields to include. |
Sample Response
{
"data": {
"project_id": 33082,
"name": "Demo Project",
"locations": "01001,Massachusetts,United States",
"check_frequency": 24,
"stats": {
"keywords_count": 21,
"average_position": 59,
"moved_up": 2,
"moved_down": 3,
"no_change": 16,
"top_3": 2,
"top_10": 5,
"top_30": 9,
"top_100": 10,
"revenue": 115
}
}
}
When using include=keywords, the response adds an included section:
{
"included": {
"keywords": [
{ "name": "keyword one" },
{ "name": "keyword two" }
],
"keywords_meta": {
"per_page": 25,
"next_cursor": "eyJrZXl3b3Jkcy5pZCI6NDQ4NjQ4NTIsIl9wb2ludHNUb05leHRJdGVtcyI6dHJ1ZX0",
"has_more": true
}
}
}
Sample Code
curl -X GET "https://v2.serpwatch.io/api/reporting/projects/33082" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Accept: application/json"
const response = await fetch(
"https://v2.serpwatch.io/api/reporting/projects/33082",
{
headers: {
Authorization: "Bearer YOUR_API_KEY",
Accept: "application/json"
}
}
);
const data = await response.json();