# Tick (approve) one store locale

- **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}/repositories/{repository\_id}/store/listing/ticks](#scalar-operation-post-apiv1externalcodingcustomerscustomer-idrepositoriesrepository-idstorelistingticks)

**Schemas**

- [StoreListingTickRequest](#scalar-schema-storelistingtickrequest)
- [StoreListingRead](#scalar-schema-storelistingread)
- [StoreListingLanguageRead](#scalar-schema-storelistinglanguageread)
- [StoreListingLocaleDetailRead](#scalar-schema-storelistinglocaledetailread)
- [StoreListingShotRead](#scalar-schema-storelistingshotread)
- [OutputReview](#scalar-schema-outputreview)
- [OutputReviewIssue](#scalar-schema-outputreviewissue)
- [StoreListingFieldRead](#scalar-schema-storelistingfieldread)
- [StoreListingReviewRead](#scalar-schema-storelistingreviewread)
- [StoreListingWorkRead](#scalar-schema-storelistingworkread)
- [WorkError](#scalar-schema-workerror)
- [StoreListingWorkItemRead](#scalar-schema-storelistingworkitemread)
- [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

### Store

Beta: may change without notice. Shipping an app to the App Store and Google Play: store connections, builds, releases and rollouts, the store listing in every language, screenshots, review logins and the release checklist.

## Operations

<a id="scalar-operation-post-apiv1externalcodingcustomerscustomer-idrepositoriesrepository-idstorelistingticks"></a>

### Tick (approve) one store locale

- **Method:** `POST`
- **Path:** `/api/v1/external/coding/customers/{customer_id}/repositories/{repository_id}/store/listing/ticks`
- **Operation ID:** `tickStoreListing`
- **Tags:** Store

`ticked: true` approves exactly the locale's current drafts and screenshots: any later change clears the tick, and only ticked locales are ever pushed. Refused (409 `listing_over_limit`) while a field is over its store limit or a link isn't one. `ticked: false` withdraws it. Signed-in owners and admins only.

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

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

#### Path parameters

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

#### Request body

**Required:** `true`

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

[StoreListingTickRequest](#scalar-schema-storelistingtickrequest)

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

**Generated example:**

```json
{
  "locale": "",
  "platform": "ios",
  "ticked": true
}
```

#### Responses

##### 200 Request fulfilled, document follows

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

[StoreListingRead](#scalar-schema-storelistingread)

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

**Generated example:**

```json
{
  "adopted": true,
  "editable": {
    "additionalProperty": true
  },
  "imported_at": "",
  "languages": [
    {
      "apple": "",
      "in_app": true,
      "key": "",
      "listed": true,
      "name": "",
      "play": "",
      "translation_requested": false
    }
  ],
  "locales": [
    {
      "captures": [
        {
          "ai_generated": true,
          "artwork_model": "",
          "artwork_sha256": "",
          "caption": "",
          "caption_back_translation": "",
          "display_type": "",
          "height": 1,
          "kind": "",
          "order": 1,
          "output_review": {
            "artifact_sha256": "",
            "issues": [
              {
                "category": "",
                "evidence": "",
                "suggestion": ""
              }
            ],
            "language": "",
            "model": "",
            "source_sha256": "",
            "status": "clear",
            "version": 1
          },
          "pick": 1,
          "pii": "",
          "problems": [
            ""
          ],
          "sha256": "",
          "source": "syndai",
          "source_commit": "",
          "source_sha256": "",
          "source_tree": "",
          "url": "",
          "width": 1
        }
      ],
      "fields": [
        {
          "back_translation": "",
          "draft": "",
          "field": "",
          "limit": 1,
          "live": "",
          "over": 1,
          "repo": "",
          "unit": ""
        }
      ],
      "locale": "",
      "platform": "",
      "shots": [
        {
          "ai_generated": true,
          "artwork_model": "",
          "artwork_sha256": "",
          "caption": "",
          "caption_back_translation": "",
          "display_type": "",
          "height": 1,
          "kind": "",
          "order": 1,
          "output_review": {
            "artifact_sha256": "",
            "issues": [
              {
                "category": "",
                "evidence": "",
                "suggestion": ""
              }
            ],
            "language": "",
            "model": "",
            "source_sha256": "",
            "status": "clear",
            "version": 1
          },
          "pick": 1,
          "pii": "",
          "problems": [
            ""
          ],
          "sha256": "",
          "source": "syndai",
          "source_commit": "",
          "source_sha256": "",
          "source_tree": "",
          "url": "",
          "width": 1
        }
      ],
      "state": "",
      "ticked_at": ""
    }
  ],
  "review": {
    "demo_kind": "",
    "demo_username": "",
    "needs_login": false,
    "notes": "",
    "refusal": ""
  },
  "work": {
    "error": {
      "detail": "",
      "kind": ""
    },
    "id": "",
    "items": [
      {
        "locale": "",
        "platform": "",
        "state": ""
      }
    ],
    "kind": "",
    "requested_at": "",
    "state": "",
    "updated_at": ""
  }
}
```

##### 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-storelistingtickrequest"></a>

### StoreListingTickRequest

**Type:** `object`

- **`locale` (required)**: `string`, minLength: `2`, maxLength: `16`
- **`platform` (required)**: `string`, possible values: `"ios", "android"`
- **`ticked` (required)**: `boolean`

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

**Generated example:**

```json
{
  "locale": "",
  "platform": "ios",
  "ticked": true
}
```

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

### StoreListingRead

**Type:** `object`

- **`adopted` (required)**: `boolean`
- **`locales` (required)**: array of [StoreListingLocaleDetailRead](#scalar-schema-storelistinglocaledetailread)
- **`editable`**: `object`

  **Additional properties:**

  `boolean`
- **`imported_at`**: `string | null`
- **`languages`**: array of [StoreListingLanguageRead](#scalar-schema-storelistinglanguageread)
- **`review`**: [StoreListingReviewRead](#scalar-schema-storelistingreviewread)
- **`work`**: [StoreListingWorkRead](#scalar-schema-storelistingworkread) | `null`

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

**Generated example:**

```json
{
  "adopted": true,
  "editable": {
    "additionalProperty": true
  },
  "imported_at": "",
  "languages": [
    {
      "apple": "",
      "in_app": true,
      "key": "",
      "listed": true,
      "name": "",
      "play": "",
      "translation_requested": false
    }
  ],
  "locales": [
    {
      "captures": [
        {
          "ai_generated": true,
          "artwork_model": "",
          "artwork_sha256": "",
          "caption": "",
          "caption_back_translation": "",
          "display_type": "",
          "height": 1,
          "kind": "",
          "order": 1,
          "output_review": {
            "artifact_sha256": "",
            "issues": [
              {
                "category": "",
                "evidence": "",
                "suggestion": ""
              }
            ],
            "language": "",
            "model": "",
            "source_sha256": "",
            "status": "clear",
            "version": 1
          },
          "pick": 1,
          "pii": "",
          "problems": [
            ""
          ],
          "sha256": "",
          "source": "syndai",
          "source_commit": "",
          "source_sha256": "",
          "source_tree": "",
          "url": "",
          "width": 1
        }
      ],
      "fields": [
        {
          "back_translation": "",
          "draft": "",
          "field": "",
          "limit": 1,
          "live": "",
          "over": 1,
          "repo": "",
          "unit": ""
        }
      ],
      "locale": "",
      "platform": "",
      "shots": [
        {
          "ai_generated": true,
          "artwork_model": "",
          "artwork_sha256": "",
          "caption": "",
          "caption_back_translation": "",
          "display_type": "",
          "height": 1,
          "kind": "",
          "order": 1,
          "output_review": {
            "artifact_sha256": "",
            "issues": [
              {
                "category": "",
                "evidence": "",
                "suggestion": ""
              }
            ],
            "language": "",
            "model": "",
            "source_sha256": "",
            "status": "clear",
            "version": 1
          },
          "pick": 1,
          "pii": "",
          "problems": [
            ""
          ],
          "sha256": "",
          "source": "syndai",
          "source_commit": "",
          "source_sha256": "",
          "source_tree": "",
          "url": "",
          "width": 1
        }
      ],
      "state": "",
      "ticked_at": ""
    }
  ],
  "review": {
    "demo_kind": "",
    "demo_username": "",
    "needs_login": false,
    "notes": "",
    "refusal": ""
  },
  "work": {
    "error": {
      "detail": "",
      "kind": ""
    },
    "id": "",
    "items": [
      {
        "locale": "",
        "platform": "",
        "state": ""
      }
    ],
    "kind": "",
    "requested_at": "",
    "state": "",
    "updated_at": ""
  }
}
```

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

### StoreListingLanguageRead

**Type:** `object`

- **`in_app` (required)**: `boolean`
- **`key` (required)**: `string`
- **`listed` (required)**: `boolean`
- **`name` (required)**: `string`
- **`apple`**: `string | null`
- **`play`**: `string | null`
- **`translation_requested`**: `boolean`, default: `false`

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

**Generated example:**

```json
{
  "apple": "",
  "in_app": true,
  "key": "",
  "listed": true,
  "name": "",
  "play": "",
  "translation_requested": false
}
```

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

### StoreListingLocaleDetailRead

**Type:** `object`

- **`fields` (required)**: array of [StoreListingFieldRead](#scalar-schema-storelistingfieldread)
- **`locale` (required)**: `string`
- **`platform` (required)**: `string`
- **`state` (required)**: `string`
- **`captures`**: array of [StoreListingShotRead](#scalar-schema-storelistingshotread)
- **`shots`**: array of [StoreListingShotRead](#scalar-schema-storelistingshotread)
- **`ticked_at`**: `string | null`

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

**Generated example:**

```json
{
  "captures": [
    {
      "ai_generated": true,
      "artwork_model": "",
      "artwork_sha256": "",
      "caption": "",
      "caption_back_translation": "",
      "display_type": "",
      "height": 1,
      "kind": "",
      "order": 1,
      "output_review": {
        "artifact_sha256": "",
        "issues": [
          {
            "category": "",
            "evidence": "",
            "suggestion": ""
          }
        ],
        "language": "",
        "model": "",
        "source_sha256": "",
        "status": "clear",
        "version": 1
      },
      "pick": 1,
      "pii": "",
      "problems": [
        ""
      ],
      "sha256": "",
      "source": "syndai",
      "source_commit": "",
      "source_sha256": "",
      "source_tree": "",
      "url": "",
      "width": 1
    }
  ],
  "fields": [
    {
      "back_translation": "",
      "draft": "",
      "field": "",
      "limit": 1,
      "live": "",
      "over": 1,
      "repo": "",
      "unit": ""
    }
  ],
  "locale": "",
  "platform": "",
  "shots": [
    {
      "ai_generated": true,
      "artwork_model": "",
      "artwork_sha256": "",
      "caption": "",
      "caption_back_translation": "",
      "display_type": "",
      "height": 1,
      "kind": "",
      "order": 1,
      "output_review": {
        "artifact_sha256": "",
        "issues": [
          {
            "category": "",
            "evidence": "",
            "suggestion": ""
          }
        ],
        "language": "",
        "model": "",
        "source_sha256": "",
        "status": "clear",
        "version": 1
      },
      "pick": 1,
      "pii": "",
      "problems": [
        ""
      ],
      "sha256": "",
      "source": "syndai",
      "source_commit": "",
      "source_sha256": "",
      "source_tree": "",
      "url": "",
      "width": 1
    }
  ],
  "state": "",
  "ticked_at": ""
}
```

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

### StoreListingShotRead

**Type:** `object`

- **`display_type` (required)**: `string`
- **`height` (required)**: `integer`
- **`kind` (required)**: `string`
- **`order` (required)**: `integer`
- **`width` (required)**: `integer`
- **`ai_generated`**: `boolean | null`
- **`artwork_model`**: `string | null`
- **`artwork_sha256`**: `string | null`
- **`caption`**: `string | null`
- **`caption_back_translation`**: `string | null`
- **`output_review`**: [OutputReview](#scalar-schema-outputreview) | `null`
- **`pick`**: `integer | null`
- **`pii`**: `string | null`
- **`problems`**: `array of string`
- **`sha256`**: `string | null`
- **`source`**: `string`, default: `"syndai"`
- **`source_commit`**: `string | null`
- **`source_sha256`**: `string | null`
- **`source_tree`**: `string | null`
- **`url`**: `string | null`

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

**Generated example:**

```json
{
  "ai_generated": true,
  "artwork_model": "",
  "artwork_sha256": "",
  "caption": "",
  "caption_back_translation": "",
  "display_type": "",
  "height": 1,
  "kind": "",
  "order": 1,
  "output_review": {
    "artifact_sha256": "",
    "issues": [
      {
        "category": "",
        "evidence": "",
        "suggestion": ""
      }
    ],
    "language": "",
    "model": "",
    "source_sha256": "",
    "status": "clear",
    "version": 1
  },
  "pick": 1,
  "pii": "",
  "problems": [
    ""
  ],
  "sha256": "",
  "source": "syndai",
  "source_commit": "",
  "source_sha256": "",
  "source_tree": "",
  "url": "",
  "width": 1
}
```

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

### OutputReview

**Type:** `object`

- **`artifact_sha256` (required)**: `string`
- **`issues` (required)**: array of [OutputReviewIssue](#scalar-schema-outputreviewissue), maxItems: `8`
- **`language` (required)**: `string`
- **`model` (required)**: `string`
- **`source_sha256` (required)**: `string`
- **`status` (required)**: `string`, possible values: `"clear", "issues", "unavailable"`
- **`version` (required)**: `integer`

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

**Generated example:**

```json
{
  "artifact_sha256": "",
  "issues": [
    {
      "category": "",
      "evidence": "",
      "suggestion": ""
    }
  ],
  "language": "",
  "model": "",
  "source_sha256": "",
  "status": "clear",
  "version": 1
}
```

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

### OutputReviewIssue

**Type:** `object`

- **`category` (required)**: `string`
- **`evidence` (required)**: `string`, minLength: `1`, maxLength: `600`
- **`suggestion` (required)**: `string`, minLength: `1`, maxLength: `300`

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

**Generated example:**

```json
{
  "category": "",
  "evidence": "",
  "suggestion": ""
}
```

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

### StoreListingFieldRead

**Type:** `object`

- **`field` (required)**: `string`
- **`limit` (required)**: `integer`
- **`over` (required)**: `integer`
- **`unit` (required)**: `string`
- **`back_translation`**: `string | null`
- **`draft`**: `string | null`
- **`live`**: `string | null`
- **`repo`**: `string | null`

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

**Generated example:**

```json
{
  "back_translation": "",
  "draft": "",
  "field": "",
  "limit": 1,
  "live": "",
  "over": 1,
  "repo": "",
  "unit": ""
}
```

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

### StoreListingReviewRead

**Type:** `object`

- **`demo_kind`**: `string | null`
- **`demo_username`**: `string | null`
- **`needs_login`**: `boolean`, default: `false`
- **`notes`**: `string | null`
- **`refusal`**: `string | null`

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

**Generated example:**

```json
{
  "demo_kind": "",
  "demo_username": "",
  "needs_login": false,
  "notes": "",
  "refusal": ""
}
```

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

### StoreListingWorkRead

**Type:** `object`

- **`id` (required)**: `string`
- **`items` (required)**: array of [StoreListingWorkItemRead](#scalar-schema-storelistingworkitemread)
- **`kind` (required)**: `string`
- **`requested_at` (required)**: `string`
- **`state` (required)**: `string`
- **`updated_at` (required)**: `string`
- **`error`**: [WorkError](#scalar-schema-workerror) | `null`

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

**Generated example:**

```json
{
  "error": {
    "detail": "",
    "kind": ""
  },
  "id": "",
  "items": [
    {
      "locale": "",
      "platform": "",
      "state": ""
    }
  ],
  "kind": "",
  "requested_at": "",
  "state": "",
  "updated_at": ""
}
```

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

### WorkError

**Type:** `object`

- **`detail` (required)**: `string`
- **`kind` (required)**: `string`

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

**Generated example:**

```json
{
  "detail": "",
  "kind": ""
}
```

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

### StoreListingWorkItemRead

**Type:** `object`

- **`platform` (required)**: `string`
- **`state` (required)**: `string`
- **`locale`**: `string | null`

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

**Generated example:**

```json
{
  "locale": "",
  "platform": "",
  "state": ""
}
```

<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-17"></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.
