# Answer a question people ask

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

## Contents

**Operations**

- [POST /api/v1/external/coding/customers/{customer\_id}/seo/sites/{site\_id}/questions/{key}/answer](#scalar-operation-post-apiv1externalcodingcustomerscustomer-idseositessite-idquestionskeyanswer)

**Schemas**

- [SeoQuestionAnswerRequest](#scalar-schema-seoquestionanswerrequest)
- [SeoQuestionsRead](#scalar-schema-seoquestionsread)
- [SeoAnswerPageRead](#scalar-schema-seoanswerpageread)
- [SeoQuestionRead](#scalar-schema-seoquestionread)
- [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-post-apiv1externalcodingcustomerscustomer-idseositessite-idquestionskeyanswer"></a>

### Answer a question people ask

- **Method:** `POST`
- **Path:** `/api/v1/external/coding/customers/{customer_id}/seo/sites/{site_id}/questions/{key}/answer`
- **Operation ID:** `answerSiteQuestion`
- **Tags:** Sites

The owner's one-line answer (`text`, 1-500 characters) to a question their site doesn't answer. Syndai writes the site's answer from it the next day, citing it, and never invents anything beyond it. Returns the What people ask section. An answered question is 409. Needs `coding:apps:publish`; a portal member who is not an owner or admin is 403.

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

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

#### Path parameters

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

#### Request body

**Required:** `true`

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

[SeoQuestionAnswerRequest](#scalar-schema-seoquestionanswerrequest)

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

**Generated example:**

```json
{
  "text": ""
}
```

#### Responses

##### 200 Request fulfilled, document follows

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

[SeoQuestionsRead](#scalar-schema-seoquestionsread)

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

**Generated example:**

```json
{
  "autopilot": true,
  "no_website": true,
  "pages": [
    {
      "impressions": 1,
      "impressions_before": 1,
      "path": "",
      "topic": ""
    }
  ],
  "questions": [
    {
      "answer": "",
      "impressions": 1,
      "key": "",
      "sources": [
        ""
      ],
      "state": "",
      "text": "",
      "topic": "",
      "undo_commit": "",
      "url": ""
    }
  ],
  "topics": [
    ""
  ]
}
```

##### 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-3"></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-3)

##### default Unexpected error

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

[ProblemDetail](#scalar-schema-problemdetail)

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

**Generated example:**

```json
null
```

## Schemas

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

### SeoQuestionAnswerRequest

**Type:** `object`

- **`text` (required)**: `string`, minLength: `1`, maxLength: `500`

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

**Generated example:**

```json
{
  "text": ""
}
```

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

### SeoQuestionsRead

**Type:** `object`

- **`autopilot` (required)**: `boolean`
- **`no_website` (required)**: `boolean`
- **`questions` (required)**: array of [SeoQuestionRead](#scalar-schema-seoquestionread)
- **`topics` (required)**: `array of string`
- **`pages`**: array of [SeoAnswerPageRead](#scalar-schema-seoanswerpageread)

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

**Generated example:**

```json
{
  "autopilot": true,
  "no_website": true,
  "pages": [
    {
      "impressions": 1,
      "impressions_before": 1,
      "path": "",
      "topic": ""
    }
  ],
  "questions": [
    {
      "answer": "",
      "impressions": 1,
      "key": "",
      "sources": [
        ""
      ],
      "state": "",
      "text": "",
      "topic": "",
      "undo_commit": "",
      "url": ""
    }
  ],
  "topics": [
    ""
  ]
}
```

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

### SeoAnswerPageRead

**Type:** `object`

- **`impressions` (required)**: `integer`
- **`impressions_before` (required)**: `integer`
- **`path` (required)**: `string`
- **`topic` (required)**: `string`

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

**Generated example:**

```json
{
  "impressions": 1,
  "impressions_before": 1,
  "path": "",
  "topic": ""
}
```

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

### SeoQuestionRead

**Type:** `object`

- **`impressions` (required)**: `integer`
- **`key` (required)**: `string`
- **`sources` (required)**: `array of string`
- **`state` (required)**: `string`
- **`text` (required)**: `string`
- **`topic` (required)**: `string`
- **`answer`**: `string | null`
- **`undo_commit`**: `string | null`
- **`url`**: `string | null`

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

**Generated example:**

```json
{
  "answer": "",
  "impressions": 1,
  "key": "",
  "sources": [
    ""
  ],
  "state": "",
  "text": "",
  "topic": "",
  "undo_commit": "",
  "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", "PUBLISH_TAG_EXISTS", "PUBLISH_VERSION_EXISTS", "VERSION_NOT_DEPLOYED", "DATA_REFUSED", "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-9"></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", "PUBLISH_TAG_EXISTS", "PUBLISH_VERSION_EXISTS", "VERSION_NOT_DEPLOYED", "DATA_REFUSED", "INTERNAL_ERROR"`

Stable error codes surfaced to public CaaS clients.
