GroundScore
Sign in
API Docs

Sites

Read the sites tied to your account. Each site carries a domain, a display name, a status, and a snapshot of the latest scan.

List sites

GET/api/v1/sitesscope: read:sites

Returns up to 100 sites owned by the authenticated user, ordered by most recently added.

Example request

bash
curl -H "Authorization: Bearer gs_live_yourkeyhere" \
     https://app.groundscore.ai/api/v1/sites

Example response

json
{
  "data": {
    "sites": [
      {
        "id": "clx8h2k4p0001qz7m3n9d5f2g",
        "domain": "example.com",
        "name": "Example",
        "status": "active",
        "createdAt": "2026-05-01T12:00:00.000Z"
      }
    ]
  }
}

Response fields

FieldTypeDescription
idstringThe site's GroundScore ID. Opaque; do not parse it.
domainstringNormalized domain, without protocol, www, or trailing slash.
namestring | nullDisplay name. Null when the account never set one.
statusstringOne of active, inactive, or prospect.
createdAtstringISO 8601 timestamp for when the site was added.
The list is capped at 100. If your account has more sites, call GET /api/v1/sites/{siteId} for the specific ones you care about. There is no pagination cursor in v1.

Get site detail

GET/api/v1/sites/{siteId}scope: read:sites

Returns the same fields as the list endpoint, plus a compact summary of the latest completed scan (id, score, status, completed timestamp).

Path parameters

ParameterTypeDescription
siteIdstringThe site's GroundScore ID, from GET /api/v1/sites.

Example request

bash
curl -H "Authorization: Bearer gs_live_yourkeyhere" \
     https://app.groundscore.ai/api/v1/sites/clx8h2k4p0001qz7m3n9d5f2g

Example response

json
{
  "data": {
    "site": {
      "id": "clx8h2k4p0001qz7m3n9d5f2g",
      "domain": "example.com",
      "name": "Example",
      "status": "active",
      "createdAt": "2026-05-01T12:00:00.000Z",
      "latestScan": {
        "id": "clx9m4t7v0003qz7m8b2k6h1w",
        "score": 72,
        "status": "completed",
        "completedAt": "2026-05-22T03:15:00.000Z"
      }
    }
  }
}

latestScan is the most recently completed scan for the site. It is null when no scan has completed yet, so a site whose first scan is still running also returns null here.

Errors

CodeWhen
not_foundThe site does not exist or is not owned by the authenticated user.
insufficient_scopeKey lacks read:sites.