---
title: "Refresh Site"
method: POST
path: "/sites/{site_id}/refresh"
tags: ["sites"]
---

# Refresh Site

`POST /sites/{site_id}/refresh`

## Request

- Base URL: `https://api.xeorank.com` (the document declares no server; this is the origin it was published from)
- URL: `https://api.xeorank.com/sites/{site_id}/refresh`
- Auth: API key in header `X-Agent-Key`

Re-run the analysis for this site.

If ``payload.url`` is provided, that URL is analyzed (the host must
match the site's registered domain). Otherwise falls back to the
site homepage. Reuses the existing analyze path (crawl_url +
analyze_page_content) so signals and stored snapshots stay
consistent with what ``/dashboard/analysis`` produces.

## Path parameters

- `site_id` string, required

## Query parameters

- `email` string, nullable

## Request body

- RefreshSiteRequest: Optional override for POST /sites/{id}/refresh. When ``url`` is omitted or null, the refresh runs against the site's homepage (existing behavior). When present, the URL must belong to the same host as the site's registered domain (prevents abuse).
  - `url` string, nullable

## Response `200`

Successful Response

- SiteOverviewOut: Roll-up payload for /dashboard/sites/[siteId].
  - `id` string, required
  - `domain` string, required
  - `org_id` string, nullable
  - `organization_name` string, nullable
  - `owner_user_id` string, nullable
  - `owner_email` string, nullable
  - `can_admin` boolean
  - `gsc_url` string, nullable
  - `gsc_connected` boolean
  - `gsc_site_paired` boolean
  - `gsc_status` string, nullable
  - `gsc_fix` string, nullable
  - `gsc_sync_error` string, nullable
  - `gsc_synced_at` string, date-time, nullable
  - `framer_connected` boolean
  - `framer_site_id` string, nullable
  - `framer_project` string, nullable
  - `wordpress_connected` boolean
  - `editable_surfaces` string[]
  - `editing_hint` string, nullable
  - `created_at` string, date-time, nullable
  - `pages_count` integer
  - `competitor_count` integer
  - `latest_crawl` CrawlJobStatus
    - `job_id` string, required
    - `seed_url` string, required
    - `status` 'queued' | 'running' | 'completed' | 'partial' | 'failed' | 'cancelled', required
    - `stage` string
    - `status_detail` string, nullable
    - `pages_crawled` integer
    - `pages_discovered` integer
    - `counts` CrawlCounts
      - `fetched_pages` integer
      - `recorded_urls` integer
      - `not_fetched_urls` integer
    - `errors_count` integer
    - `health_score` number, nullable
    - `health_breakdown` object, nullable
    - `coverage` object, nullable
    - `error_message` string, nullable
    - `retry_count` integer
    - `last_heartbeat_at` string, date-time, nullable
    - `dispatch_required` boolean
    - `started_at` string, date-time, nullable
    - `finished_at` string, date-time, nullable
    - `created_at` string, date-time, nullable
  - `related_site_ids` string[]
  - `latest_analysis` AnalyzeResponse
    - `url` string, required
    - `title` string, nullable
    - `analyzed_at` string, date-time, nullable
    - `query` string, nullable
    - `missing_topics` string[]
    - `competitor_themes` string[]
    - `summary` string, required
    - `score` number, required
    - `seo_breakdown` SeoScoreBreakdown
      - `overall` number
      - `technical` number
      - `on_page` number
      - `content` number
      - `links` number
    - `page_type` 'homepage' | 'about' | 'contact' | 'collection' | 'search_results' | 'profile' | 'article' | 'product' | 'service' | 'faq' | 'howto' | 'job_posting' | 'event' | 'recipe' | 'course' | 'dataset' | 'software' | 'medical' | 'webpage' | 'legal' | 'pricing' | 'auth' | 'support' | 'error', nullable
    - `page_type_confidence` number, nullable
    - `schema_validation` object, nullable
    - `grounded` boolean
    - `aeo_score` number, nullable
    - `aeo_recommendations` string[]
    - `geo_score` number, nullable
    - `geo_recommendations` string[]
    - `recommendations` Recommendation[]
      - `rule_id` string, required
      - `category` string, required
      - `priority` string, required
      - `title` string, required
      - `description` string, required
      - `impact` string, required
      - `locator` object, nullable
    - `verification_signals` object
    - `passing_signals` integer, nullable
    - `total_signals` integer, nullable
    - `aeo_recommendations_all` string[]
    - `geo_recommendations_all` string[]

## Other responses

- `422`: Validation Error

---

[API](https://skmtc.dev/xeorank/apis/seo-intelligence-engine.md) · [All operations](https://skmtc.dev/xeorank/apis/seo-intelligence-engine/llms.txt) · [OpenAPI document](https://skmtc.dev/xeorank/apis/seo-intelligence-engine/revisions/449a3fd73454?raw)
