---
title: "Choose a site's primary Search Console property"
method: PATCH
path: "/v1/sites/{site}/search/primary-source"
tags: ["gsc"]
---

# Choose a site's primary Search Console property

`PATCH /v1/sites/{site}/search/primary-source`

## Request

- Base URL: `https://frontshelf.io/api`
- URL: `https://frontshelf.io/api/v1/sites/{site}/search/primary-source`
- Auth: HTTP bearer

Make one of a site's Search Console properties the primary: the one its dashboard and every gsc read uses unless `source_id` names another (a Domain property and a URL-prefix property count pages differently). Choosing the primary again changes nothing. Answers the property as gsc_sources_list lists it. A property that is not attached to the site is NOT_FOUND. Not billing-gated.

## Path parameters

- `site` string, required: Site ID (site_…), origin (https://example.com), or bare domain, resolved server-side; the response carries the canonical ID.

## Request body

- object
  - `source_id` string, required: One of the site's properties (ssrc_…, from gsc_sources_list).
  - `dry_run` boolean: true: check the call and say what it would do, without doing it.
  - `confirm` boolean: true: go ahead with a change that asks for confirmation.

## Response `200`

Choose a site's primary Search Console property

- object
  - `summary` string, required: The answer in one or two sentences, with the numbers it rests on.
  - `warnings` string[], required: What limits this answer (a cap, a read that was cut short). Empty when nothing does.
  - `next_actions` object[], required: What to call next, best first. Follow them.
    - `capability` string, required: What to call next: a capability.
    - `arguments` object, required: Its arguments, complete; pass them as they are.
    - `instruction` string, required: What to do, written to you.
  - `site_id` string, required: The site's canonical id.
  - `source_id` string, required: The property's id (ssrc_…), the `source_id` the other gsc reads take.
  - `property` string, required: The property as Google names it (https://example.com/ or sc-domain:example.com).
  - `kind` 'domain' | 'url_prefix', required
  - `scope` string, required: Which pages the property counts, in one sentence.
  - `role` string, required: `primary` (what the reads use by default) or `alternate`.
  - `access` string, required: available, reauth or lost.
  - `status` string, required
  - `first_look_at` string, nullable, required: When the sync marked its first look; null while unmarked, which says nothing about figures.
  - `wait` union, required: Why the property has no figures yet, while its web type holds none, with the dashboard's own sentence: a lapsed account, no account or syncing paused (`not_syncing`), else its place in the sync queue (`ahead`, always a count; `wait_ms` null when unmeasured, never 0). Null once it has figures. Reading it moves nothing in the queue.
    - object
      - `state` 'running', required
      - `first_look_ms` number, nullable, required
      - `sentence` string, required
    - object
      - `state` 'waiting', required
      - `ahead` integer, required
      - `wait_ms` number, nullable, required
      - `sentence` string, required
    - object
      - `state` 'idle', required
      - `resumes_in_ms` number, nullable, required
      - `after_error` boolean, required
      - `sentence` string, required
    - object
      - `state` 'not_syncing', required
      - `reason` 'reauth' | 'lost' | 'paused', required
      - `sentence` string, required
  - `types` object, required: Per search type: whether Google supports it, the first day of history, the last final and provisional days.
    - `web` object, required
      - `support` 'supported' | 'unsupported' | 'unknown', required
      - `history_from` string, nullable, required
      - `final_through` string, nullable, required
      - `provisional_through` string, nullable, required
      - `expiring_unfetched` integer, required: Days about to leave Google's 16-month window unfetched.
    - `image` object, required
      - `support` 'supported' | 'unsupported' | 'unknown', required
      - `history_from` string, nullable, required
      - `final_through` string, nullable, required
      - `provisional_through` string, nullable, required
      - `expiring_unfetched` integer, required: Days about to leave Google's 16-month window unfetched.
    - `video` object, required
      - `support` 'supported' | 'unsupported' | 'unknown', required
      - `history_from` string, nullable, required
      - `final_through` string, nullable, required
      - `provisional_through` string, nullable, required
      - `expiring_unfetched` integer, required: Days about to leave Google's 16-month window unfetched.
    - `news` object, required
      - `support` 'supported' | 'unsupported' | 'unknown', required
      - `history_from` string, nullable, required
      - `final_through` string, nullable, required
      - `provisional_through` string, nullable, required
      - `expiring_unfetched` integer, required: Days about to leave Google's 16-month window unfetched.
    - `discover` object, required
      - `support` 'supported' | 'unsupported' | 'unknown', required
      - `history_from` string, nullable, required
      - `final_through` string, nullable, required
      - `provisional_through` string, nullable, required
      - `expiring_unfetched` integer, required: Days about to leave Google's 16-month window unfetched.
    - `googleNews` object, required
      - `support` 'supported' | 'unsupported' | 'unknown', required
      - `history_from` string, nullable, required
      - `final_through` string, nullable, required
      - `provisional_through` string, nullable, required
      - `expiring_unfetched` integer, required: Days about to leave Google's 16-month window unfetched.

## Other responses

- `400`: VALIDATION_FAILED
- `401`: UNAUTHENTICATED
- `403`: ORGANIZATION_FROZEN, SCOPE_DENIED
- `404`: SITE_NOT_FOUND, NOT_FOUND
- `409`: AMBIGUOUS_SITE, SEARCH_NOT_CONNECTED, AGENT_STOPPED
- `503`: PLATFORM_READ_ONLY, DEPENDENCY_UNAVAILABLE

---

[API](https://skmtc.dev/frontshelf/apis/frontshelf-api.md) · [All operations](https://skmtc.dev/frontshelf/apis/frontshelf-api/llms.txt) · [OpenAPI document](https://skmtc.dev/frontshelf/apis/frontshelf-api/revisions/ce3602d26c7c?raw)
