Resources
Websites
Websites are the core resource. Track your own sites, client sites and competitors — no ownership verification is required for SERP and AI tracking.
GET
/api/v1/websitesRead keyList websites
Authentication: Bearer API key in the Authorization header.
| Parameter | In | Type | Description |
|---|---|---|---|
| q | query | string | Filter by domain or name |
| tag | query | string | Filter by tag name |
| relationship | query | own | client | competitor | Filter by relationship |
| status | query | active | paused | archived | Defaults to non-archived |
| limit | query | integer | Page size, max 1000 |
| offset | query | integer | Rows to skip |
Request
curl "https://rankspire.tech/api/v1/websites" \
-H "Authorization: Bearer $RANKSPIRE_KEY"Response
{
"data": [{
"id": "cm1site9x0001", "domain": "example.com", "name": "Example",
"relationship": "own", "status": "active", "country": "US", "language": "en",
"searchConsoleConnected": true, "serpTracking": true, "aiTracking": true,
"healthScore": 86, "tags": ["Client"], "lastSyncedAt": "2026-10-02T06:00:00.000Z"
}],
"meta": { "total": 1, "limit": 100, "offset": 0 }
}POST
/api/v1/websitesRead & write keyAdd a website
Authentication: Bearer API key in the Authorization header.
| Parameter | In | Type | Description |
|---|---|---|---|
| domain* | body | string | Domain such as example.com; protocol and www are removed |
| name | body | string | Display name |
| relationship | body | own | client | competitor | Default own |
| country | body | ISO 3166-1 alpha-2 | Default US |
| language | body | ISO 639-1 | Default en |
| tags | body | string[] | Tag names (created if missing) |
Request
curl -X POST "https://rankspire.tech/api/v1/websites" \
-H "Authorization: Bearer $RANKSPIRE_KEY" \
-H "Content-Type: application/json" \
-d '{ "domain": "example.com", "relationship": "client", "tags": ["Client", "SaaS"] }'Response
{ "data": { "id": "cm1site9x0001", "domain": "example.com", "status": "active", ... } }422 validation_errorinvalid domain or the domain already exists402 payment_requiredthe plan's website limit is reached
GET
/api/v1/websites/{id}Read keyGet a website
Authentication: Bearer API key in the Authorization header.
| Parameter | In | Type | Description |
|---|---|---|---|
| id* | path | string | Website ID |
Request
curl "https://rankspire.tech/api/v1/websites/cm1site9x0001" \
-H "Authorization: Bearer $RANKSPIRE_KEY"Response
{ "data": { "id": "cm1site9x0001", "domain": "example.com", ... } }404 not_found
PATCH
/api/v1/websites/{id}Read & write keyUpdate a website
Authentication: Bearer API key in the Authorization header.
| Parameter | In | Type | Description |
|---|---|---|---|
| name | body | string | Display name |
| tags | body | string[] | Replaces all tags |
| serpTracking | body | boolean | Toggle SERP tracking |
| aiTracking | body | boolean | Toggle AI visibility tracking |
| status | body | active | paused | Pause collection |
| archived | body | boolean | Archive or restore |
Request
curl -X PATCH "https://rankspire.tech/api/v1/websites/cm1site9x0001" \
-H "Authorization: Bearer $RANKSPIRE_KEY" \
-H "Content-Type: application/json" \
-d '{ "tags": ["Client"], "aiTracking": false }'Response
{ "data": { "id": "cm1site9x0001", "tags": ["Client"], "aiTracking": false, ... } }DELETE
/api/v1/websites/{id}Read & write keyDelete a website and all of its data
Authentication: Bearer API key in the Authorization header.
Request
curl -X DELETE "https://rankspire.tech/api/v1/websites/cm1site9x0001" \
-H "Authorization: Bearer $RANKSPIRE_KEY"Response
{ "data": { "deleted": true } }404 not_found
POST
/api/v1/websites/{id}/refreshRead & write keyQueue data collection
Authentication: Bearer API key in the Authorization header.
| Parameter | In | Type | Description |
|---|---|---|---|
| kinds | body | ('serp'|'ai'|'backlinks'|'gsc')[] | Defaults to all |
Request
curl -X POST "https://rankspire.tech/api/v1/websites/cm1site9x0001/refresh" \
-H "Authorization: Bearer $RANKSPIRE_KEY" \
-H "Content-Type: application/json" \
-d '{ "kinds": ["serp", "ai"] }'Response
{ "data": { "jobs": [{ "id": "cm1job…", "type": "serp.collect", "status": "queued" }] } }