Skip to content
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 key

List websites

Authentication: Bearer API key in the Authorization header.

Parameters
ParameterInTypeDescription
qquerystringFilter by domain or name
tagquerystringFilter by tag name
relationshipqueryown | client | competitorFilter by relationship
statusqueryactive | paused | archivedDefaults to non-archived
limitqueryintegerPage size, max 1000
offsetqueryintegerRows 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 key

Add a website

Authentication: Bearer API key in the Authorization header.

Parameters
ParameterInTypeDescription
domain*bodystringDomain such as example.com; protocol and www are removed
namebodystringDisplay name
relationshipbodyown | client | competitorDefault own
countrybodyISO 3166-1 alpha-2Default US
languagebodyISO 639-1Default en
tagsbodystring[]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_error invalid domain or the domain already exists
  • 402 payment_required the plan's website limit is reached
GET/api/v1/websites/{id}Read key

Get a website

Authentication: Bearer API key in the Authorization header.

Parameters
ParameterInTypeDescription
id*pathstringWebsite 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 key

Update a website

Authentication: Bearer API key in the Authorization header.

Parameters
ParameterInTypeDescription
namebodystringDisplay name
tagsbodystring[]Replaces all tags
serpTrackingbodybooleanToggle SERP tracking
aiTrackingbodybooleanToggle AI visibility tracking
statusbodyactive | pausedPause collection
archivedbodybooleanArchive 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 key

Delete 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 key

Queue data collection

Authentication: Bearer API key in the Authorization header.

Parameters
ParameterInTypeDescription
kindsbody('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" }] } }