# Read one site's SEO tab

- **OpenAPI Version:** `3.2.0`
- **API Version:** `3.1.0`
- **Contact:** Syndai <https://syndai.ai>

## Contents

**Operations**

- [GET /api/v1/external/coding/customers/{customer\_id}/seo](#scalar-operation-get-apiv1externalcodingcustomerscustomer-idseo)

**Schemas**

- [SeoResponse](#scalar-schema-seoresponse)
- [SeoAiRead](#scalar-schema-seoairead)
- [SeoAiVisitRead](#scalar-schema-seoaivisitread)
- [SeoOutcomeRead](#scalar-schema-seooutcomeread)
- [SeoCounts](#scalar-schema-seocounts)
- [SeoBaselineRead](#scalar-schema-seobaselineread)
- [SeoGoogleRead](#scalar-schema-seogoogleread)
- [SeoGuardRead](#scalar-schema-seoguardread)
- [SeoGuardRowRead](#scalar-schema-seoguardrowread)
- [SeoOnGoogleRead](#scalar-schema-seoongoogleread)
- [SeoPageRead](#scalar-schema-seopageread)
- [SeoPendingFactsRead](#scalar-schema-seopendingfactsread)
- [SeoSearchRead](#scalar-schema-seosearchread)
- [SeoPageStatRead](#scalar-schema-seopagestatread)
- [SeoQueryRead](#scalar-schema-seoqueryread)
- [SeoSiteRead](#scalar-schema-seositeread)
- [SeoListingsRead](#scalar-schema-seolistingsread)
- [SeoListingFactsRead](#scalar-schema-seolistingfactsread)
- [SeoGoogleListingRead](#scalar-schema-seogooglelistingread)
- [SeoListingPlaceRead](#scalar-schema-seolistingplaceread)
- [AppPublicationRead](#scalar-schema-apppublicationread)
- [AppDeploymentRead](#scalar-schema-appdeploymentread)
- [ProblemDetail](#scalar-schema-problemdetail)
- [ExternalErrorCode](#scalar-schema-externalerrorcode)

<a id="scalar-context-global-servers"></a>

## Servers

- **URL:** `https://api.syndai.ai`

<a id="scalar-context-global-authentication"></a>

## Authentication

- **CustomerApiKey**: HTTP bearer (`API Key`)

  Customer API key sent as a bearer token

## Tags

### Sites

Beta: may change without notice. Websites connected for search and AI visibility: connect a site, link it to Google Search Console, read its SEO tab, show or hide it on Google, and run a priced Ask AI check of how assistants answer about it.

## Operations

<a id="scalar-operation-get-apiv1externalcodingcustomerscustomer-idseo"></a>

### Read one site's SEO tab

- **Method:** `GET`
- **Path:** `/api/v1/external/coding/customers/{customer_id}/seo`
- **Operation ID:** `getSeo`
- **Tags:** Sites

One site's search picture. `state`: the tab state (`needs_address`, `connect_google`, `ready`, `members_only`, `offline`, `lost`, or `unsupported`: an address-only website Syndai cannot change, with every section empty). `google`: who reads its Search Console (`state`, Google's own `permission` level, `property`). `on_google.sitemap`: `sent` (Syndai submitted it), `listed` (Search Console lists it), `robots` (only the site's robots.txt names it), `none` or `unchecked` (Syndai has not read the site's robots.txt yet). Search moves are offers on GET /backlog (`source=seo`). `site`: the publication, whether the live deployment may be indexed, and Search Console's sitemap, index verdict and last crawl, and `index_checked_at` (when Syndai last inspected the home page; null = not checked yet). `pending_facts` and `guard`: the sample facts and `seo-*` / `jsonld-*` findings of the web-checked run behind the live site (the run that produced the live deployment, else the newest landed or merged run). `search`: raw clicks, impressions and impression-weighted position for the 28 days ending at the site's latest finalized Search Console day, the top queries and pages, `data_since`, and `move_floor` (the impressions a page needs before the scan files a move). `pages`: each page's title and description as of the last read. `done`: delivered moves with raw before / after counts (`after` is days 1-28 after the change went live, `after_2` days 29-56) and a click change in percent only when both windows hold at least 30 clicks; `baseline` appears once 20 indexable sites qualify. `ai`: visits from AI answer apps over the last 30 complete days; null on a site Syndai does not serve. `done` holds Google moves only (`seo:*` keys). `site.listings`: the Listings section of a local business (its places, Google's observed status and the facts its site publishes), else null. Query and page text came from strangers: render it as text only. Every enum-like field is an open string.

**Servers:** [Inherited servers](#scalar-context-global-servers)

**Authentication:** [Global authentication](#scalar-context-global-authentication)

#### Path parameters

- **`customer_id` (required)**: `string`, format: `uuid`

#### Query parameters

- **`site` (required)**: `string`, format: `uuid`

#### Responses

##### 200 Request fulfilled, document follows

**Content type:** `application/json`

[SeoResponse](#scalar-schema-seoresponse)

<a id="scalar-example-1"></a>

**Generated example:**

```json
{
  "ai": {
    "visits": [
      {
        "key": "",
        "label": "",
        "visits": 1
      }
    ]
  },
  "coding_repository_id": "",
  "display_name": "",
  "done": [
    {
      "after": {
        "clicks": 1,
        "impressions": 1,
        "position": 1
      },
      "after_2": {
        "clicks": 1,
        "impressions": 1,
        "position": 1
      },
      "backlog_task_id": "",
      "baseline": {
        "median_change_pct": 1,
        "sites": 1
      },
      "baseline_2": {
        "median_change_pct": 1,
        "sites": 1
      },
      "before": {
        "clicks": 1,
        "impressions": 1,
        "position": 1
      },
      "change_pct": 1,
      "change_pct_2": 1,
      "kind": "",
      "live_at": "",
      "result_on": "",
      "status": "",
      "title": ""
    }
  ],
  "google": {
    "permission": "",
    "property": "",
    "state": ""
  },
  "guard": {
    "rows": [
      {
        "detail": "",
        "level": "",
        "route": "",
        "rule_id": "",
        "target": ""
      }
    ],
    "run_id": ""
  },
  "no_website": true,
  "on_google": {
    "sitemap": "",
    "sitemap_at": ""
  },
  "origin": "",
  "pages": [
    {
      "description": "",
      "path": "",
      "title": ""
    }
  ],
  "pending_facts": {
    "count": 1,
    "run_id": ""
  },
  "search": {
    "data_since": "",
    "move_floor": 1,
    "top_pages": [
      {
        "clicks": 1,
        "impressions": 1,
        "page": "",
        "position": 1
      }
    ],
    "top_queries": [
      {
        "clicks": 1,
        "impressions": 1,
        "position": 1,
        "query": ""
      }
    ],
    "totals": {
      "clicks": 1,
      "impressions": 1,
      "position": 1
    },
    "window_end": "",
    "window_start": ""
  },
  "search_visible": true,
  "site": {
    "index_checked_at": "",
    "index_verdict": "",
    "indexable": true,
    "last_crawl_at": "",
    "listings": {
      "done": 1,
      "facts": {
        "address": "",
        "hours": "",
        "missing": [
          ""
        ],
        "name": "",
        "phone": "",
        "website": ""
      },
      "google": {
        "checked_at": "",
        "fixes": [
          ""
        ],
        "rating": 1,
        "review_link": "",
        "reviews": 1,
        "status": ""
      },
      "places": [
        {
          "blurb": "",
          "can_fill": true,
          "catch": "",
          "key": "",
          "name": "",
          "state": "",
          "url": ""
        }
      ],
      "total": 1
    },
    "publication": {
      "accounts": true,
      "auto_redeploy": true,
      "feature_requests": "off",
      "feature_requests_autostart_on": false,
      "feature_requests_min_votes": 6,
      "generation": 1,
      "hosting": "syndai",
      "hosting_over_limit": false,
      "hosting_paid_cap_usd": 20,
      "hosting_paid_on": false,
      "hosting_usd_this_month": 1,
      "id": "",
      "latest_deployment": {
        "created_at": "",
        "error_cause": "",
        "error_kind": "",
        "error_message": "",
        "finished_at": "",
        "id": "",
        "sha": "",
        "status": "",
        "url": ""
      },
      "members": true,
      "operation_error_cause": "",
      "operation_error_kind": "",
      "operation_error_message": "",
      "pinned_sha": "",
      "search_visible": true,
      "signup": "",
      "site_languages_consent_current": false,
      "site_languages_max_usd": 0,
      "site_languages_paid_on": false,
      "site_languages_terms": "",
      "site_languages_usage_markup": 0,
      "slug": "",
      "state": "",
      "taps_counted": true,
      "url": "",
      "visitors": true,
      "writes_paused": true
    },
    "sitemap_submitted_at": ""
  },
  "site_id": "",
  "source": "",
  "state": ""
}
```

##### 400, 401, 403, 404

- `400` Bad request syntax or unsupported method
- `401` Invalid or missing customer API key
- `403` Insufficient scope or forbidden customer access
- `404` Resource not found

**Content type:** `application/problem+json`

[ProblemDetail](#scalar-schema-problemdetail)

RFC 7807 problem detail returned for public CaaS errors.

<a id="scalar-example-2"></a>

**Generated example:**

```json
{
  "code": "BUDGET_EXHAUSTED",
  "detail": null,
  "existing_run_id": null,
  "instance": null,
  "status": 1,
  "title": "",
  "type": "about:blank",
  "additionalProperty": "anything"
}
```

##### 429 Rate limit exceeded

**Headers:**

- **`Retry-After`**

  Seconds to wait before retrying the request

  `integer`

**Content type:** `application/problem+json`

[ProblemDetail](#scalar-schema-problemdetail)

RFC 7807 problem detail returned for public CaaS errors.

[Generated example](#scalar-example-2)

##### default Unexpected error

**Content type:** `application/problem+json`

[ProblemDetail](#scalar-schema-problemdetail)

<a id="scalar-example-3"></a>

**Generated example:**

```json
null
```

## Schemas

<a id="scalar-schema-seoresponse"></a>

### SeoResponse

**Type:** `object`

- **`done` (required)**: array of [SeoOutcomeRead](#scalar-schema-seooutcomeread)
- **`google` (required)**: [SeoGoogleRead](#scalar-schema-seogoogleread)
- **`guard` (required)**: [SeoGuardRead](#scalar-schema-seoguardread)
- **`no_website` (required)**: `boolean`
- **`on_google` (required)**: [SeoOnGoogleRead](#scalar-schema-seoongoogleread)
- **`pages` (required)**: array of [SeoPageRead](#scalar-schema-seopageread)
- **`pending_facts` (required)**: [SeoPendingFactsRead](#scalar-schema-seopendingfactsread)
- **`search` (required)**: [SeoSearchRead](#scalar-schema-seosearchread)
- **`site` (required)**: [SeoSiteRead](#scalar-schema-seositeread)
- **`site_id` (required)**: `string`, format: `uuid`
- **`source` (required)**: `string`
- **`state` (required)**: `string`
- **`ai`**: [SeoAiRead](#scalar-schema-seoairead) | `null`
- **`coding_repository_id`**: `string | null`, format: `uuid`
- **`display_name`**: `string | null`
- **`origin`**: `string | null`
- **`search_visible`**: `boolean | null`

<a id="scalar-example-4"></a>

**Generated example:**

```json
{
  "ai": {
    "visits": [
      {
        "key": "",
        "label": "",
        "visits": 1
      }
    ]
  },
  "coding_repository_id": "",
  "display_name": "",
  "done": [
    {
      "after": {
        "clicks": 1,
        "impressions": 1,
        "position": 1
      },
      "after_2": {
        "clicks": 1,
        "impressions": 1,
        "position": 1
      },
      "backlog_task_id": "",
      "baseline": {
        "median_change_pct": 1,
        "sites": 1
      },
      "baseline_2": {
        "median_change_pct": 1,
        "sites": 1
      },
      "before": {
        "clicks": 1,
        "impressions": 1,
        "position": 1
      },
      "change_pct": 1,
      "change_pct_2": 1,
      "kind": "",
      "live_at": "",
      "result_on": "",
      "status": "",
      "title": ""
    }
  ],
  "google": {
    "permission": "",
    "property": "",
    "state": ""
  },
  "guard": {
    "rows": [
      {
        "detail": "",
        "level": "",
        "route": "",
        "rule_id": "",
        "target": ""
      }
    ],
    "run_id": ""
  },
  "no_website": true,
  "on_google": {
    "sitemap": "",
    "sitemap_at": ""
  },
  "origin": "",
  "pages": [
    {
      "description": "",
      "path": "",
      "title": ""
    }
  ],
  "pending_facts": {
    "count": 1,
    "run_id": ""
  },
  "search": {
    "data_since": "",
    "move_floor": 1,
    "top_pages": [
      {
        "clicks": 1,
        "impressions": 1,
        "page": "",
        "position": 1
      }
    ],
    "top_queries": [
      {
        "clicks": 1,
        "impressions": 1,
        "position": 1,
        "query": ""
      }
    ],
    "totals": {
      "clicks": 1,
      "impressions": 1,
      "position": 1
    },
    "window_end": "",
    "window_start": ""
  },
  "search_visible": true,
  "site": {
    "index_checked_at": "",
    "index_verdict": "",
    "indexable": true,
    "last_crawl_at": "",
    "listings": {
      "done": 1,
      "facts": {
        "address": "",
        "hours": "",
        "missing": [
          ""
        ],
        "name": "",
        "phone": "",
        "website": ""
      },
      "google": {
        "checked_at": "",
        "fixes": [
          ""
        ],
        "rating": 1,
        "review_link": "",
        "reviews": 1,
        "status": ""
      },
      "places": [
        {
          "blurb": "",
          "can_fill": true,
          "catch": "",
          "key": "",
          "name": "",
          "state": "",
          "url": ""
        }
      ],
      "total": 1
    },
    "publication": {
      "accounts": true,
      "auto_redeploy": true,
      "feature_requests": "off",
      "feature_requests_autostart_on": false,
      "feature_requests_min_votes": 6,
      "generation": 1,
      "hosting": "syndai",
      "hosting_over_limit": false,
      "hosting_paid_cap_usd": 20,
      "hosting_paid_on": false,
      "hosting_usd_this_month": 1,
      "id": "",
      "latest_deployment": {
        "created_at": "",
        "error_cause": "",
        "error_kind": "",
        "error_message": "",
        "finished_at": "",
        "id": "",
        "sha": "",
        "status": "",
        "url": ""
      },
      "members": true,
      "operation_error_cause": "",
      "operation_error_kind": "",
      "operation_error_message": "",
      "pinned_sha": "",
      "search_visible": true,
      "signup": "",
      "site_languages_consent_current": false,
      "site_languages_max_usd": 0,
      "site_languages_paid_on": false,
      "site_languages_terms": "",
      "site_languages_usage_markup": 0,
      "slug": "",
      "state": "",
      "taps_counted": true,
      "url": "",
      "visitors": true,
      "writes_paused": true
    },
    "sitemap_submitted_at": ""
  },
  "site_id": "",
  "source": "",
  "state": ""
}
```

<a id="scalar-schema-seoairead"></a>

### SeoAiRead

**Type:** `object`

- **`visits` (required)**: array of [SeoAiVisitRead](#scalar-schema-seoaivisitread)

<a id="scalar-example-5"></a>

**Generated example:**

```json
{
  "visits": [
    {
      "key": "",
      "label": "",
      "visits": 1
    }
  ]
}
```

<a id="scalar-schema-seoaivisitread"></a>

### SeoAiVisitRead

**Type:** `object`

- **`key` (required)**: `string`
- **`label` (required)**: `string`
- **`visits` (required)**: `integer`

<a id="scalar-example-6"></a>

**Generated example:**

```json
{
  "key": "",
  "label": "",
  "visits": 1
}
```

<a id="scalar-schema-seooutcomeread"></a>

### SeoOutcomeRead

**Type:** `object`

- **`backlog_task_id` (required)**: `string`
- **`kind` (required)**: `string`
- **`status` (required)**: `string`
- **`title` (required)**: `string`
- **`after`**: [SeoCounts](#scalar-schema-seocounts) | `null`
- **`after_2`**: [SeoCounts](#scalar-schema-seocounts) | `null`
- **`baseline`**: [SeoBaselineRead](#scalar-schema-seobaselineread) | `null`
- **`baseline_2`**: [SeoBaselineRead](#scalar-schema-seobaselineread) | `null`
- **`before`**: [SeoCounts](#scalar-schema-seocounts) | `null`
- **`change_pct`**: `number | null`
- **`change_pct_2`**: `number | null`
- **`live_at`**: `string | null`
- **`result_on`**: `string | null`

<a id="scalar-example-7"></a>

**Generated example:**

```json
{
  "after": {
    "clicks": 1,
    "impressions": 1,
    "position": 1
  },
  "after_2": {
    "clicks": 1,
    "impressions": 1,
    "position": 1
  },
  "backlog_task_id": "",
  "baseline": {
    "median_change_pct": 1,
    "sites": 1
  },
  "baseline_2": {
    "median_change_pct": 1,
    "sites": 1
  },
  "before": {
    "clicks": 1,
    "impressions": 1,
    "position": 1
  },
  "change_pct": 1,
  "change_pct_2": 1,
  "kind": "",
  "live_at": "",
  "result_on": "",
  "status": "",
  "title": ""
}
```

<a id="scalar-schema-seocounts"></a>

### SeoCounts

**Type:** `object`

- **`clicks` (required)**: `integer`
- **`impressions` (required)**: `integer`
- **`position` (required)**: `number`

<a id="scalar-example-8"></a>

**Generated example:**

```json
{
  "clicks": 1,
  "impressions": 1,
  "position": 1
}
```

<a id="scalar-schema-seobaselineread"></a>

### SeoBaselineRead

**Type:** `object`

- **`median_change_pct` (required)**: `number`
- **`sites` (required)**: `integer`

<a id="scalar-example-9"></a>

**Generated example:**

```json
{
  "median_change_pct": 1,
  "sites": 1
}
```

<a id="scalar-schema-seogoogleread"></a>

### SeoGoogleRead

**Type:** `object`

- **`state` (required)**: `string`
- **`permission`**: `string | null`
- **`property`**: `string | null`

<a id="scalar-example-10"></a>

**Generated example:**

```json
{
  "permission": "",
  "property": "",
  "state": ""
}
```

<a id="scalar-schema-seoguardread"></a>

### SeoGuardRead

**Type:** `object`

- **`rows` (required)**: array of [SeoGuardRowRead](#scalar-schema-seoguardrowread)
- **`run_id`**: `string | null`

<a id="scalar-example-11"></a>

**Generated example:**

```json
{
  "rows": [
    {
      "detail": "",
      "level": "",
      "route": "",
      "rule_id": "",
      "target": ""
    }
  ],
  "run_id": ""
}
```

<a id="scalar-schema-seoguardrowread"></a>

### SeoGuardRowRead

**Type:** `object`

- **`level` (required)**: `string`
- **`route` (required)**: `string`
- **`rule_id` (required)**: `string`
- **`target` (required)**: `string`
- **`detail`**: `string | null`

<a id="scalar-example-12"></a>

**Generated example:**

```json
{
  "detail": "",
  "level": "",
  "route": "",
  "rule_id": "",
  "target": ""
}
```

<a id="scalar-schema-seoongoogleread"></a>

### SeoOnGoogleRead

**Type:** `object`

- **`sitemap` (required)**: `string`
- **`sitemap_at`**: `string | null`

<a id="scalar-example-13"></a>

**Generated example:**

```json
{
  "sitemap": "",
  "sitemap_at": ""
}
```

<a id="scalar-schema-seopageread"></a>

### SeoPageRead

**Type:** `object`

- **`description` (required)**: `string`
- **`path` (required)**: `string`
- **`title` (required)**: `string`

<a id="scalar-example-14"></a>

**Generated example:**

```json
{
  "description": "",
  "path": "",
  "title": ""
}
```

<a id="scalar-schema-seopendingfactsread"></a>

### SeoPendingFactsRead

**Type:** `object`

- **`count` (required)**: `integer`
- **`run_id`**: `string | null`

<a id="scalar-example-15"></a>

**Generated example:**

```json
{
  "count": 1,
  "run_id": ""
}
```

<a id="scalar-schema-seosearchread"></a>

### SeoSearchRead

**Type:** `object`

- **`move_floor` (required)**: `integer`
- **`top_pages` (required)**: array of [SeoPageStatRead](#scalar-schema-seopagestatread)
- **`top_queries` (required)**: array of [SeoQueryRead](#scalar-schema-seoqueryread)
- **`totals` (required)**: [SeoCounts](#scalar-schema-seocounts)
- **`window_end` (required)**: `string`
- **`window_start` (required)**: `string`
- **`data_since`**: `string | null`

<a id="scalar-example-16"></a>

**Generated example:**

```json
{
  "data_since": "",
  "move_floor": 1,
  "top_pages": [
    {
      "clicks": 1,
      "impressions": 1,
      "page": "",
      "position": 1
    }
  ],
  "top_queries": [
    {
      "clicks": 1,
      "impressions": 1,
      "position": 1,
      "query": ""
    }
  ],
  "totals": {
    "clicks": 1,
    "impressions": 1,
    "position": 1
  },
  "window_end": "",
  "window_start": ""
}
```

<a id="scalar-schema-seopagestatread"></a>

### SeoPageStatRead

**Type:** `object`

- **`clicks` (required)**: `integer`
- **`impressions` (required)**: `integer`
- **`page` (required)**: `string`
- **`position` (required)**: `number`

<a id="scalar-example-17"></a>

**Generated example:**

```json
{
  "clicks": 1,
  "impressions": 1,
  "page": "",
  "position": 1
}
```

<a id="scalar-schema-seoqueryread"></a>

### SeoQueryRead

**Type:** `object`

- **`clicks` (required)**: `integer`
- **`impressions` (required)**: `integer`
- **`position` (required)**: `number`
- **`query` (required)**: `string`

<a id="scalar-example-18"></a>

**Generated example:**

```json
{
  "clicks": 1,
  "impressions": 1,
  "position": 1,
  "query": ""
}
```

<a id="scalar-schema-seositeread"></a>

### SeoSiteRead

**Type:** `object`

- **`index_checked_at`**: `string | null`
- **`index_verdict`**: `string | null`
- **`indexable`**: `boolean | null`
- **`last_crawl_at`**: `string | null`
- **`listings`**: [SeoListingsRead](#scalar-schema-seolistingsread) | `null`
- **`publication`**: [AppPublicationRead](#scalar-schema-apppublicationread) | `null`
- **`sitemap_submitted_at`**: `string | null`

<a id="scalar-example-19"></a>

**Generated example:**

```json
{
  "index_checked_at": "",
  "index_verdict": "",
  "indexable": true,
  "last_crawl_at": "",
  "listings": {
    "done": 1,
    "facts": {
      "address": "",
      "hours": "",
      "missing": [
        ""
      ],
      "name": "",
      "phone": "",
      "website": ""
    },
    "google": {
      "checked_at": "",
      "fixes": [
        ""
      ],
      "rating": 1,
      "review_link": "",
      "reviews": 1,
      "status": ""
    },
    "places": [
      {
        "blurb": "",
        "can_fill": true,
        "catch": "",
        "key": "",
        "name": "",
        "state": "",
        "url": ""
      }
    ],
    "total": 1
  },
  "publication": {
    "accounts": true,
    "auto_redeploy": true,
    "feature_requests": "off",
    "feature_requests_autostart_on": false,
    "feature_requests_min_votes": 6,
    "generation": 1,
    "hosting": "syndai",
    "hosting_over_limit": false,
    "hosting_paid_cap_usd": 20,
    "hosting_paid_on": false,
    "hosting_usd_this_month": 1,
    "id": "",
    "latest_deployment": {
      "created_at": "",
      "error_cause": "",
      "error_kind": "",
      "error_message": "",
      "finished_at": "",
      "id": "",
      "sha": "",
      "status": "",
      "url": ""
    },
    "members": true,
    "operation_error_cause": "",
    "operation_error_kind": "",
    "operation_error_message": "",
    "pinned_sha": "",
    "search_visible": true,
    "signup": "",
    "site_languages_consent_current": false,
    "site_languages_max_usd": 0,
    "site_languages_paid_on": false,
    "site_languages_terms": "",
    "site_languages_usage_markup": 0,
    "slug": "",
    "state": "",
    "taps_counted": true,
    "url": "",
    "visitors": true,
    "writes_paused": true
  },
  "sitemap_submitted_at": ""
}
```

<a id="scalar-schema-seolistingsread"></a>

### SeoListingsRead

**Type:** `object`

- **`done` (required)**: `integer`
- **`facts` (required)**: [SeoListingFactsRead](#scalar-schema-seolistingfactsread)
- **`google` (required)**: [SeoGoogleListingRead](#scalar-schema-seogooglelistingread)
- **`places` (required)**: array of [SeoListingPlaceRead](#scalar-schema-seolistingplaceread)
- **`total` (required)**: `integer`

<a id="scalar-example-20"></a>

**Generated example:**

```json
{
  "done": 1,
  "facts": {
    "address": "",
    "hours": "",
    "missing": [
      ""
    ],
    "name": "",
    "phone": "",
    "website": ""
  },
  "google": {
    "checked_at": "",
    "fixes": [
      ""
    ],
    "rating": 1,
    "review_link": "",
    "reviews": 1,
    "status": ""
  },
  "places": [
    {
      "blurb": "",
      "can_fill": true,
      "catch": "",
      "key": "",
      "name": "",
      "state": "",
      "url": ""
    }
  ],
  "total": 1
}
```

<a id="scalar-schema-seolistingfactsread"></a>

### SeoListingFactsRead

**Type:** `object`

- **`missing` (required)**: `array of string`
- **`address`**: `string | null`
- **`hours`**: `string | null`
- **`name`**: `string | null`
- **`phone`**: `string | null`
- **`website`**: `string | null`

<a id="scalar-example-21"></a>

**Generated example:**

```json
{
  "address": "",
  "hours": "",
  "missing": [
    ""
  ],
  "name": "",
  "phone": "",
  "website": ""
}
```

<a id="scalar-schema-seogooglelistingread"></a>

### SeoGoogleListingRead

**Type:** `object`

- **`fixes` (required)**: `array of string`
- **`status` (required)**: `string`
- **`checked_at`**: `string | null`
- **`rating`**: `number | null`
- **`review_link`**: `string | null`
- **`reviews`**: `integer | null`

<a id="scalar-example-22"></a>

**Generated example:**

```json
{
  "checked_at": "",
  "fixes": [
    ""
  ],
  "rating": 1,
  "review_link": "",
  "reviews": 1,
  "status": ""
}
```

<a id="scalar-schema-seolistingplaceread"></a>

### SeoListingPlaceRead

**Type:** `object`

- **`blurb` (required)**: `string`
- **`can_fill` (required)**: `boolean`
- **`catch` (required)**: `string`
- **`key` (required)**: `string`
- **`name` (required)**: `string`
- **`state` (required)**: `string`
- **`url` (required)**: `string`

<a id="scalar-example-23"></a>

**Generated example:**

```json
{
  "blurb": "",
  "can_fill": true,
  "catch": "",
  "key": "",
  "name": "",
  "state": "",
  "url": ""
}
```

<a id="scalar-schema-apppublicationread"></a>

### AppPublicationRead

**Type:** `object`

- **`auto_redeploy` (required)**: `boolean`
- **`generation` (required)**: `integer`
- **`hosting_usd_this_month` (required)**: `number`
- **`id` (required)**: `string`
- **`members` (required)**: `boolean`
- **`signup` (required)**: `string`
- **`slug` (required)**: `string`
- **`state` (required)**: `string`
- **`taps_counted` (required)**: `boolean`
- **`visitors` (required)**: `boolean`
- **`writes_paused` (required)**: `boolean`
- **`accounts`**: `boolean | null`
- **`feature_requests`**: `string`, default: `"off"`
- **`feature_requests_autostart_on`**: `boolean`, default: `false`
- **`feature_requests_min_votes`**: `integer`, default: `6`
- **`hosting`**: `string`, default: `"syndai"`
- **`hosting_over_limit`**: `boolean`, default: `false`
- **`hosting_paid_cap_usd`**: `number`, default: `20`
- **`hosting_paid_on`**: `boolean`, default: `false`
- **`latest_deployment`**: [AppDeploymentRead](#scalar-schema-appdeploymentread) | `null`
- **`operation_error_cause`**: `string | null`
- **`operation_error_kind`**: `string | null`
- **`operation_error_message`**: `string | null`
- **`pinned_sha`**: `string | null`
- **`search_visible`**: `boolean | null`
- **`site_languages_consent_current`**: `boolean`, default: `false`
- **`site_languages_max_usd`**: `number`, default: `0`
- **`site_languages_paid_on`**: `boolean`, default: `false`
- **`site_languages_terms`**: `string`, default: `""`
- **`site_languages_usage_markup`**: `number`, default: `0`
- **`url`**: `string | null`

<a id="scalar-example-24"></a>

**Generated example:**

```json
{
  "accounts": true,
  "auto_redeploy": true,
  "feature_requests": "off",
  "feature_requests_autostart_on": false,
  "feature_requests_min_votes": 6,
  "generation": 1,
  "hosting": "syndai",
  "hosting_over_limit": false,
  "hosting_paid_cap_usd": 20,
  "hosting_paid_on": false,
  "hosting_usd_this_month": 1,
  "id": "",
  "latest_deployment": {
    "created_at": "",
    "error_cause": "",
    "error_kind": "",
    "error_message": "",
    "finished_at": "",
    "id": "",
    "sha": "",
    "status": "",
    "url": ""
  },
  "members": true,
  "operation_error_cause": "",
  "operation_error_kind": "",
  "operation_error_message": "",
  "pinned_sha": "",
  "search_visible": true,
  "signup": "",
  "site_languages_consent_current": false,
  "site_languages_max_usd": 0,
  "site_languages_paid_on": false,
  "site_languages_terms": "",
  "site_languages_usage_markup": 0,
  "slug": "",
  "state": "",
  "taps_counted": true,
  "url": "",
  "visitors": true,
  "writes_paused": true
}
```

<a id="scalar-schema-appdeploymentread"></a>

### AppDeploymentRead

**Type:** `object`

- **`created_at` (required)**: `string`
- **`id` (required)**: `string`
- **`status` (required)**: `string`
- **`error_cause`**: `string | null`
- **`error_kind`**: `string | null`
- **`error_message`**: `string | null`
- **`finished_at`**: `string | null`
- **`sha`**: `string | null`
- **`url`**: `string | null`

<a id="scalar-example-25"></a>

**Generated example:**

```json
{
  "created_at": "",
  "error_cause": "",
  "error_kind": "",
  "error_message": "",
  "finished_at": "",
  "id": "",
  "sha": "",
  "status": "",
  "url": ""
}
```

<a id="scalar-schema-problemdetail"></a>

### ProblemDetail

**Type:** `object`

RFC 7807 problem detail returned for public CaaS errors.

- **`code` (required)**: `string`, possible values: `"BUDGET_EXHAUSTED", "QUOTA_EXCEEDED", "RUN_CONCURRENCY_LIMIT", "CUSTOMER_DISABLED", "REPO_NOT_BOUND", "IDEMPOTENCY_REPLAY", "CONFLICT", "MISSION_BUSY_RETRY", "HITL_REQUEST_CONFLICT", "HITL_REQUEST_SETTLED", "RUN_TERMINATED_BEFORE_RESPONSE", "INVALID_POLICY", "INVALID_SCOPE", "RATE_LIMITED", "INSTALLATION_INCOMPLETE", "SUBSCRIPTION_USAGE_UNAVAILABLE", "INVALID_TOKEN", "ROLE_REQUIRED", "PLAN_UPGRADE_REQUIRED", "EMAIL_MISMATCH", "EXPIRED_TOKEN", "NOT_FOUND", "OVERSCOPE_ACK_REQUIRED", "VERIFY_FAILED", "PUBLISH_IN_FLIGHT", "PUBLISH_UNSUPPORTED_REPO", "PUBLICATION_NOT_LIVE", "NO_APP_DATA", "FEATURE_REQUESTS_NEEDS_MEMBERS", "EMPTY_UPDATE", "BAD_CURSOR", "HUMAN_APPROVAL_REQUIRED", "PROTECTED_PATHS_MANAGED_ONLY", "RUN_IN_FLIGHT", "TEXT_EDIT_REFUSED", "CLI_UPGRADE_REQUIRED", "PRODUCTION_STEP_UP_REQUIRED", "PRICES_UPDATING", "GITHUB_UNAVAILABLE", "PUBLISH_NOT_SET_UP", "VERSION_NOT_DEPLOYED", "INTERNAL_ERROR"`

  Stable error codes surfaced to public CaaS clients.
- **`status` (required)**: `integer`
- **`title` (required)**: `string`
- **`detail`**: `string | null`, default: `null`
- **`existing_run_id`**: `string | null`, default: `null`
- **`instance`**: `string | null`, default: `null`
- **`type`**: `string`, default: `"about:blank"`

<a id="scalar-example-26"></a>

**Generated example:**

```json
{
  "code": "BUDGET_EXHAUSTED",
  "detail": null,
  "existing_run_id": null,
  "instance": null,
  "status": 1,
  "title": "",
  "type": "about:blank",
  "additionalProperty": "anything"
}
```

<a id="scalar-schema-externalerrorcode"></a>

### ExternalErrorCode

**Type:** `string`, possible values: `"BUDGET_EXHAUSTED", "QUOTA_EXCEEDED", "RUN_CONCURRENCY_LIMIT", "CUSTOMER_DISABLED", "REPO_NOT_BOUND", "IDEMPOTENCY_REPLAY", "CONFLICT", "MISSION_BUSY_RETRY", "HITL_REQUEST_CONFLICT", "HITL_REQUEST_SETTLED", "RUN_TERMINATED_BEFORE_RESPONSE", "INVALID_POLICY", "INVALID_SCOPE", "RATE_LIMITED", "INSTALLATION_INCOMPLETE", "SUBSCRIPTION_USAGE_UNAVAILABLE", "INVALID_TOKEN", "ROLE_REQUIRED", "PLAN_UPGRADE_REQUIRED", "EMAIL_MISMATCH", "EXPIRED_TOKEN", "NOT_FOUND", "OVERSCOPE_ACK_REQUIRED", "VERIFY_FAILED", "PUBLISH_IN_FLIGHT", "PUBLISH_UNSUPPORTED_REPO", "PUBLICATION_NOT_LIVE", "NO_APP_DATA", "FEATURE_REQUESTS_NEEDS_MEMBERS", "EMPTY_UPDATE", "BAD_CURSOR", "HUMAN_APPROVAL_REQUIRED", "PROTECTED_PATHS_MANAGED_ONLY", "RUN_IN_FLIGHT", "TEXT_EDIT_REFUSED", "CLI_UPGRADE_REQUIRED", "PRODUCTION_STEP_UP_REQUIRED", "PRICES_UPDATING", "GITHUB_UNAVAILABLE", "PUBLISH_NOT_SET_UP", "VERSION_NOT_DEPLOYED", "INTERNAL_ERROR"`

Stable error codes surfaced to public CaaS clients.
