{
  "openapi": "3.0.0",
  "info": {
    "title": "AppSkyline API",
    "version": "1.0.0",
    "description": "Public REST API for AppSkyline. Authenticate with an API key created in the AppSkyline dashboard: send the base64-encoded key secret with HTTP Basic auth. Each key carries per-resource scopes like `keywords:read` or `apps:write`.",
    "x-api-versioning": {
      "currentVersion": "1",
      "requestHeader": "API-Version",
      "responseHeader": "API-Version",
      "compatibilityPolicy": "Omitting API-Version selects version 1. Unsupported versions return HTTP 400 with supportedVersions.",
      "deprecationPolicy": "AppSkyline announces incompatible versions at least 180 days before removal. Deprecated responses include Deprecation, Sunset, and a Link relation named deprecation.",
      "deprecationHeaders": [
        "Deprecation",
        "Sunset",
        "Link"
      ],
      "policyUrl": "https://www.appskyline.com/api.md#compatibility-version"
    }
  },
  "servers": [
    {
      "url": "https://api.appskyline.com"
    }
  ],
  "components": {
    "headers": {
      "Deprecation": {
        "description": "Present only when this API operation or version is deprecated. The value is an RFC 9745 Structured Field Date.",
        "schema": {
          "type": "string",
          "example": "@1893456000"
        }
      },
      "Sunset": {
        "description": "Present on deprecated responses when a retirement date is scheduled. The value is an HTTP-date.",
        "schema": {
          "type": "string",
          "example": "Tue, 01 Jan 2030 00:00:00 GMT"
        }
      },
      "DeprecationLink": {
        "description": "Present on deprecated responses and points to the applicable migration or deprecation policy with rel=\"deprecation\".",
        "schema": {
          "type": "string",
          "example": "<https://www.appskyline.com/api.md#compatibility-version>; rel=\"deprecation\""
        }
      }
    },
    "securitySchemes": {
      "apiKey": {
        "type": "http",
        "scheme": "basic",
        "description": "HTTP Basic auth carrying only the API key secret: Authorization: Basic base64(<key secret>)."
      },
      "accessToken": {
        "type": "apiKey",
        "in": "header",
        "name": "Authorization",
        "description": "Operator session token issued by the AppSkyline dashboard: Authorization: Token <access token>."
      }
    },
    "schemas": {
      "App": {
        "type": "object",
        "required": [
          "_id",
          "organizationId",
          "name"
        ],
        "properties": {
          "_id": {
            "type": "string"
          },
          "organizationId": {
            "type": "string"
          },
          "name": {
            "type": "string"
          },
          "domain": {
            "type": "string"
          },
          "store": {
            "type": "string"
          },
          "country": {
            "type": "string"
          }
        },
        "additionalProperties": true
      },
      "Keyword": {
        "type": "object",
        "required": [
          "_id",
          "organizationId",
          "appId",
          "searchTerms"
        ],
        "properties": {
          "_id": {
            "type": "string"
          },
          "organizationId": {
            "type": "string"
          },
          "appId": {
            "type": "string"
          },
          "searchTerms": {
            "type": "string"
          },
          "country": {
            "type": "string"
          },
          "language": {
            "type": "string"
          },
          "rank": {
            "type": "integer",
            "nullable": true
          }
        },
        "additionalProperties": true
      },
      "KeywordPage": {
        "type": "object",
        "required": [
          "items",
          "nextCursor"
        ],
        "properties": {
          "items": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Keyword"
            }
          },
          "nextCursor": {
            "nullable": true,
            "type": "string",
            "description": "Opaque cursor for the next page, or null after the final page"
          }
        },
        "additionalProperties": false
      },
      "EngagementRow": {
        "type": "object",
        "properties": {
          "appId": {
            "type": "string"
          },
          "date": {
            "type": "string",
            "format": "date"
          },
          "impressions": {
            "type": "integer"
          },
          "downloads": {
            "type": "integer"
          },
          "sessions": {
            "type": "integer"
          }
        },
        "additionalProperties": true
      },
      "WebhookSubscription": {
        "type": "object",
        "required": [
          "_id",
          "organizationId",
          "url",
          "active"
        ],
        "properties": {
          "_id": {
            "type": "string"
          },
          "organizationId": {
            "type": "string"
          },
          "url": {
            "type": "string",
            "format": "uri"
          },
          "active": {
            "type": "boolean"
          },
          "events": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "secret": {
            "type": "string",
            "description": "Returned only when the subscription is created."
          }
        },
        "additionalProperties": true
      },
      "DeleteResult": {
        "type": "object",
        "required": [
          "_id"
        ],
        "properties": {
          "_id": {
            "type": "string"
          }
        },
        "additionalProperties": true
      },
      "BatchOperation": {
        "type": "object",
        "required": [
          "alias",
          "url"
        ],
        "properties": {
          "alias": {
            "type": "string"
          },
          "url": {
            "type": "string",
            "description": "Allowed collection plus optional query string."
          }
        }
      },
      "BatchResponse": {
        "type": "object",
        "description": "Map from each requested alias to its result array.",
        "additionalProperties": {
          "type": "array",
          "items": {
            "type": "object"
          }
        }
      },
      "Error": {
        "type": "object",
        "description": "Structured JSON API error.",
        "required": [
          "name",
          "message",
          "status"
        ],
        "properties": {
          "name": {
            "type": "string"
          },
          "message": {
            "type": "string"
          },
          "status": {
            "type": "integer"
          },
          "details": {
            "type": "object",
            "additionalProperties": true
          }
        }
      }
    }
  },
  "paths": {
    "/api/apple-app-store-engagement": {
      "get": {
        "tags": [
          "Stats"
        ],
        "summary": "Apple App Store engagement rows",
        "description": "Downloads/sessions engagement rows for your organization, optionally filtered by `appId` and a `days` cutoff. Requires the `stats:read` scope.\n",
        "security": [
          {
            "apiKey": []
          },
          {
            "accessToken": []
          }
        ],
        "parameters": [
          {
            "in": "query",
            "name": "appId",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "days",
            "schema": {
              "type": "integer"
            }
          },
          {
            "in": "header",
            "name": "API-Version",
            "required": false,
            "description": "Compatibility version. Omit to use version 1; unsupported versions return 400.",
            "schema": {
              "type": "string",
              "enum": [
                "1"
              ],
              "default": "1"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Array of engagement rows",
            "headers": {
              "RateLimit": {
                "description": "Current quota, remaining requests, and reset time.",
                "schema": {
                  "type": "string"
                }
              },
              "RateLimit-Policy": {
                "description": "Quota policy and window applied to the credential.",
                "schema": {
                  "type": "string"
                }
              },
              "API-Version": {
                "description": "Compatibility version used for the response.",
                "schema": {
                  "type": "string",
                  "enum": [
                    "1"
                  ]
                }
              },
              "Deprecation": {
                "$ref": "#/components/headers/Deprecation"
              },
              "Sunset": {
                "$ref": "#/components/headers/Sunset"
              },
              "Link": {
                "$ref": "#/components/headers/DeprecationLink"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/EngagementRow"
                  }
                }
              }
            }
          },
          "403": {
            "description": "API key is missing the `stats:read` scope",
            "headers": {
              "RateLimit": {
                "description": "Current quota, remaining requests, and reset time.",
                "schema": {
                  "type": "string"
                }
              },
              "RateLimit-Policy": {
                "description": "Quota policy and window applied to the credential.",
                "schema": {
                  "type": "string"
                }
              },
              "API-Version": {
                "description": "Compatibility version used for the response.",
                "schema": {
                  "type": "string",
                  "enum": [
                    "1"
                  ]
                }
              },
              "Deprecation": {
                "$ref": "#/components/headers/Deprecation"
              },
              "Sunset": {
                "$ref": "#/components/headers/Sunset"
              },
              "Link": {
                "$ref": "#/components/headers/DeprecationLink"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "429": {
            "description": "API key rate limit exceeded",
            "headers": {
              "RateLimit": {
                "description": "Current quota, remaining requests, and reset time.",
                "schema": {
                  "type": "string"
                }
              },
              "RateLimit-Policy": {
                "description": "Quota policy and window applied to the credential.",
                "schema": {
                  "type": "string"
                }
              },
              "API-Version": {
                "description": "Compatibility version used for the response.",
                "schema": {
                  "type": "string",
                  "enum": [
                    "1"
                  ]
                }
              },
              "Deprecation": {
                "$ref": "#/components/headers/Deprecation"
              },
              "Sunset": {
                "$ref": "#/components/headers/Sunset"
              },
              "Link": {
                "$ref": "#/components/headers/DeprecationLink"
              },
              "Retry-After": {
                "description": "Seconds until the request may be retried.",
                "schema": {
                  "type": "integer"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        },
        "operationId": "getAppleAppStoreEngagement"
      }
    },
    "/api/apps": {
      "get": {
        "tags": [
          "Apps"
        ],
        "summary": "List apps",
        "description": "Lists the apps of your organization. Requires the `apps:read` scope.\n",
        "security": [
          {
            "apiKey": []
          },
          {
            "accessToken": []
          }
        ],
        "responses": {
          "200": {
            "description": "Array of apps",
            "headers": {
              "RateLimit": {
                "description": "Current quota, remaining requests, and reset time.",
                "schema": {
                  "type": "string"
                }
              },
              "RateLimit-Policy": {
                "description": "Quota policy and window applied to the credential.",
                "schema": {
                  "type": "string"
                }
              },
              "API-Version": {
                "description": "Compatibility version used for the response.",
                "schema": {
                  "type": "string",
                  "enum": [
                    "1"
                  ]
                }
              },
              "Deprecation": {
                "$ref": "#/components/headers/Deprecation"
              },
              "Sunset": {
                "$ref": "#/components/headers/Sunset"
              },
              "Link": {
                "$ref": "#/components/headers/DeprecationLink"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/App"
                  }
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid credentials",
            "headers": {
              "RateLimit": {
                "description": "Current quota, remaining requests, and reset time.",
                "schema": {
                  "type": "string"
                }
              },
              "RateLimit-Policy": {
                "description": "Quota policy and window applied to the credential.",
                "schema": {
                  "type": "string"
                }
              },
              "API-Version": {
                "description": "Compatibility version used for the response.",
                "schema": {
                  "type": "string",
                  "enum": [
                    "1"
                  ]
                }
              },
              "Deprecation": {
                "$ref": "#/components/headers/Deprecation"
              },
              "Sunset": {
                "$ref": "#/components/headers/Sunset"
              },
              "Link": {
                "$ref": "#/components/headers/DeprecationLink"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "403": {
            "description": "API key is missing the `apps:read` scope",
            "headers": {
              "RateLimit": {
                "description": "Current quota, remaining requests, and reset time.",
                "schema": {
                  "type": "string"
                }
              },
              "RateLimit-Policy": {
                "description": "Quota policy and window applied to the credential.",
                "schema": {
                  "type": "string"
                }
              },
              "API-Version": {
                "description": "Compatibility version used for the response.",
                "schema": {
                  "type": "string",
                  "enum": [
                    "1"
                  ]
                }
              },
              "Deprecation": {
                "$ref": "#/components/headers/Deprecation"
              },
              "Sunset": {
                "$ref": "#/components/headers/Sunset"
              },
              "Link": {
                "$ref": "#/components/headers/DeprecationLink"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "429": {
            "description": "API key rate limit exceeded",
            "headers": {
              "RateLimit": {
                "description": "Current quota, remaining requests, and reset time.",
                "schema": {
                  "type": "string"
                }
              },
              "RateLimit-Policy": {
                "description": "Quota policy and window applied to the credential.",
                "schema": {
                  "type": "string"
                }
              },
              "API-Version": {
                "description": "Compatibility version used for the response.",
                "schema": {
                  "type": "string",
                  "enum": [
                    "1"
                  ]
                }
              },
              "Deprecation": {
                "$ref": "#/components/headers/Deprecation"
              },
              "Sunset": {
                "$ref": "#/components/headers/Sunset"
              },
              "Link": {
                "$ref": "#/components/headers/DeprecationLink"
              },
              "Retry-After": {
                "description": "Seconds until the request may be retried.",
                "schema": {
                  "type": "integer"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        },
        "operationId": "getApps",
        "parameters": [
          {
            "in": "header",
            "name": "API-Version",
            "required": false,
            "description": "Compatibility version. Omit to use version 1; unsupported versions return 400.",
            "schema": {
              "type": "string",
              "enum": [
                "1"
              ],
              "default": "1"
            }
          }
        ]
      },
      "post": {
        "tags": [
          "Apps"
        ],
        "summary": "Create an app",
        "description": "Requires the `apps:write` scope.",
        "security": [
          {
            "apiKey": []
          },
          {
            "accessToken": []
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "The created app",
            "headers": {
              "RateLimit": {
                "description": "Current quota, remaining requests, and reset time.",
                "schema": {
                  "type": "string"
                }
              },
              "RateLimit-Policy": {
                "description": "Quota policy and window applied to the credential.",
                "schema": {
                  "type": "string"
                }
              },
              "API-Version": {
                "description": "Compatibility version used for the response.",
                "schema": {
                  "type": "string",
                  "enum": [
                    "1"
                  ]
                }
              },
              "Deprecation": {
                "$ref": "#/components/headers/Deprecation"
              },
              "Sunset": {
                "$ref": "#/components/headers/Sunset"
              },
              "Link": {
                "$ref": "#/components/headers/DeprecationLink"
              },
              "Idempotency-Replayed": {
                "description": "True when a completed response was replayed for the supplied idempotency key.",
                "schema": {
                  "type": "boolean"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/App"
                }
              }
            }
          },
          "403": {
            "description": "API key is missing the `apps:write` scope",
            "headers": {
              "RateLimit": {
                "description": "Current quota, remaining requests, and reset time.",
                "schema": {
                  "type": "string"
                }
              },
              "RateLimit-Policy": {
                "description": "Quota policy and window applied to the credential.",
                "schema": {
                  "type": "string"
                }
              },
              "API-Version": {
                "description": "Compatibility version used for the response.",
                "schema": {
                  "type": "string",
                  "enum": [
                    "1"
                  ]
                }
              },
              "Deprecation": {
                "$ref": "#/components/headers/Deprecation"
              },
              "Sunset": {
                "$ref": "#/components/headers/Sunset"
              },
              "Link": {
                "$ref": "#/components/headers/DeprecationLink"
              },
              "Idempotency-Replayed": {
                "description": "True when a completed response was replayed for the supplied idempotency key.",
                "schema": {
                  "type": "boolean"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "409": {
            "description": "Domain is already taken",
            "headers": {
              "RateLimit": {
                "description": "Current quota, remaining requests, and reset time.",
                "schema": {
                  "type": "string"
                }
              },
              "RateLimit-Policy": {
                "description": "Quota policy and window applied to the credential.",
                "schema": {
                  "type": "string"
                }
              },
              "API-Version": {
                "description": "Compatibility version used for the response.",
                "schema": {
                  "type": "string",
                  "enum": [
                    "1"
                  ]
                }
              },
              "Deprecation": {
                "$ref": "#/components/headers/Deprecation"
              },
              "Sunset": {
                "$ref": "#/components/headers/Sunset"
              },
              "Link": {
                "$ref": "#/components/headers/DeprecationLink"
              },
              "Idempotency-Replayed": {
                "description": "True when a completed response was replayed for the supplied idempotency key.",
                "schema": {
                  "type": "boolean"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        },
        "operationId": "postApps",
        "parameters": [
          {
            "in": "header",
            "name": "API-Version",
            "required": false,
            "description": "Compatibility version. Omit to use version 1; unsupported versions return 400.",
            "schema": {
              "type": "string",
              "enum": [
                "1"
              ],
              "default": "1"
            }
          },
          {
            "in": "header",
            "name": "Idempotency-Key",
            "required": false,
            "description": "Unique retry key retained for 24 hours (maximum 255 characters).",
            "schema": {
              "type": "string",
              "minLength": 1,
              "maxLength": 255
            }
          }
        ]
      }
    },
    "/api/apps/{appId}": {
      "get": {
        "tags": [
          "Apps"
        ],
        "summary": "Get an app by id",
        "description": "Requires the `apps:read` scope.",
        "security": [
          {
            "apiKey": []
          },
          {
            "accessToken": []
          }
        ],
        "parameters": [
          {
            "in": "path",
            "name": "appId",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "header",
            "name": "API-Version",
            "required": false,
            "description": "Compatibility version. Omit to use version 1; unsupported versions return 400.",
            "schema": {
              "type": "string",
              "enum": [
                "1"
              ],
              "default": "1"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The app",
            "headers": {
              "RateLimit": {
                "description": "Current quota, remaining requests, and reset time.",
                "schema": {
                  "type": "string"
                }
              },
              "RateLimit-Policy": {
                "description": "Quota policy and window applied to the credential.",
                "schema": {
                  "type": "string"
                }
              },
              "API-Version": {
                "description": "Compatibility version used for the response.",
                "schema": {
                  "type": "string",
                  "enum": [
                    "1"
                  ]
                }
              },
              "Deprecation": {
                "$ref": "#/components/headers/Deprecation"
              },
              "Sunset": {
                "$ref": "#/components/headers/Sunset"
              },
              "Link": {
                "$ref": "#/components/headers/DeprecationLink"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/App"
                }
              }
            }
          },
          "403": {
            "description": "API key is missing the `apps:read` scope",
            "headers": {
              "RateLimit": {
                "description": "Current quota, remaining requests, and reset time.",
                "schema": {
                  "type": "string"
                }
              },
              "RateLimit-Policy": {
                "description": "Quota policy and window applied to the credential.",
                "schema": {
                  "type": "string"
                }
              },
              "API-Version": {
                "description": "Compatibility version used for the response.",
                "schema": {
                  "type": "string",
                  "enum": [
                    "1"
                  ]
                }
              },
              "Deprecation": {
                "$ref": "#/components/headers/Deprecation"
              },
              "Sunset": {
                "$ref": "#/components/headers/Sunset"
              },
              "Link": {
                "$ref": "#/components/headers/DeprecationLink"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "No such app in your organization",
            "headers": {
              "RateLimit": {
                "description": "Current quota, remaining requests, and reset time.",
                "schema": {
                  "type": "string"
                }
              },
              "RateLimit-Policy": {
                "description": "Quota policy and window applied to the credential.",
                "schema": {
                  "type": "string"
                }
              },
              "API-Version": {
                "description": "Compatibility version used for the response.",
                "schema": {
                  "type": "string",
                  "enum": [
                    "1"
                  ]
                }
              },
              "Deprecation": {
                "$ref": "#/components/headers/Deprecation"
              },
              "Sunset": {
                "$ref": "#/components/headers/Sunset"
              },
              "Link": {
                "$ref": "#/components/headers/DeprecationLink"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        },
        "operationId": "getAppsByAppId"
      },
      "put": {
        "tags": [
          "Apps"
        ],
        "summary": "Update an app",
        "description": "Requires the `apps:write` scope.",
        "security": [
          {
            "apiKey": []
          },
          {
            "accessToken": []
          }
        ],
        "parameters": [
          {
            "in": "path",
            "name": "appId",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "header",
            "name": "API-Version",
            "required": false,
            "description": "Compatibility version. Omit to use version 1; unsupported versions return 400.",
            "schema": {
              "type": "string",
              "enum": [
                "1"
              ],
              "default": "1"
            }
          },
          {
            "in": "header",
            "name": "Idempotency-Key",
            "required": false,
            "description": "Unique retry key retained for 24 hours (maximum 255 characters).",
            "schema": {
              "type": "string",
              "minLength": 1,
              "maxLength": 255
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "The updated app",
            "headers": {
              "RateLimit": {
                "description": "Current quota, remaining requests, and reset time.",
                "schema": {
                  "type": "string"
                }
              },
              "RateLimit-Policy": {
                "description": "Quota policy and window applied to the credential.",
                "schema": {
                  "type": "string"
                }
              },
              "API-Version": {
                "description": "Compatibility version used for the response.",
                "schema": {
                  "type": "string",
                  "enum": [
                    "1"
                  ]
                }
              },
              "Deprecation": {
                "$ref": "#/components/headers/Deprecation"
              },
              "Sunset": {
                "$ref": "#/components/headers/Sunset"
              },
              "Link": {
                "$ref": "#/components/headers/DeprecationLink"
              },
              "Idempotency-Replayed": {
                "description": "True when a completed response was replayed for the supplied idempotency key.",
                "schema": {
                  "type": "boolean"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/App"
                }
              }
            }
          },
          "404": {
            "description": "No such app in your organization",
            "headers": {
              "RateLimit": {
                "description": "Current quota, remaining requests, and reset time.",
                "schema": {
                  "type": "string"
                }
              },
              "RateLimit-Policy": {
                "description": "Quota policy and window applied to the credential.",
                "schema": {
                  "type": "string"
                }
              },
              "API-Version": {
                "description": "Compatibility version used for the response.",
                "schema": {
                  "type": "string",
                  "enum": [
                    "1"
                  ]
                }
              },
              "Deprecation": {
                "$ref": "#/components/headers/Deprecation"
              },
              "Sunset": {
                "$ref": "#/components/headers/Sunset"
              },
              "Link": {
                "$ref": "#/components/headers/DeprecationLink"
              },
              "Idempotency-Replayed": {
                "description": "True when a completed response was replayed for the supplied idempotency key.",
                "schema": {
                  "type": "boolean"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "409": {
            "description": "Domain is already taken",
            "headers": {
              "RateLimit": {
                "description": "Current quota, remaining requests, and reset time.",
                "schema": {
                  "type": "string"
                }
              },
              "RateLimit-Policy": {
                "description": "Quota policy and window applied to the credential.",
                "schema": {
                  "type": "string"
                }
              },
              "API-Version": {
                "description": "Compatibility version used for the response.",
                "schema": {
                  "type": "string",
                  "enum": [
                    "1"
                  ]
                }
              },
              "Deprecation": {
                "$ref": "#/components/headers/Deprecation"
              },
              "Sunset": {
                "$ref": "#/components/headers/Sunset"
              },
              "Link": {
                "$ref": "#/components/headers/DeprecationLink"
              },
              "Idempotency-Replayed": {
                "description": "True when a completed response was replayed for the supplied idempotency key.",
                "schema": {
                  "type": "boolean"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        },
        "operationId": "putAppsByAppId"
      }
    },
    "/api/batch": {
      "post": {
        "tags": [
          "Batch"
        ],
        "summary": "Read multiple collections in one request",
        "description": "Executes an array of authenticated read operations and returns an object keyed by each operation alias. Only the allowlisted app, keyword, preference, role and metadata collections can be read.\n",
        "security": [
          {
            "accessToken": []
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "array",
                "minItems": 1,
                "items": {
                  "type": "object",
                  "required": [
                    "alias",
                    "url"
                  ],
                  "properties": {
                    "alias": {
                      "type": "string"
                    },
                    "url": {
                      "type": "string",
                      "description": "Allowed collection plus optional query string"
                    }
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Results keyed by operation alias",
            "headers": {
              "RateLimit": {
                "description": "Current quota, remaining requests, and reset time.",
                "schema": {
                  "type": "string"
                }
              },
              "RateLimit-Policy": {
                "description": "Quota policy and window applied to the credential.",
                "schema": {
                  "type": "string"
                }
              },
              "API-Version": {
                "description": "Compatibility version used for the response.",
                "schema": {
                  "type": "string",
                  "enum": [
                    "1"
                  ]
                }
              },
              "Deprecation": {
                "$ref": "#/components/headers/Deprecation"
              },
              "Sunset": {
                "$ref": "#/components/headers/Sunset"
              },
              "Link": {
                "$ref": "#/components/headers/DeprecationLink"
              },
              "Idempotency-Replayed": {
                "description": "True when a completed response was replayed for the supplied idempotency key.",
                "schema": {
                  "type": "boolean"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BatchResponse"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid credentials",
            "headers": {
              "RateLimit": {
                "description": "Current quota, remaining requests, and reset time.",
                "schema": {
                  "type": "string"
                }
              },
              "RateLimit-Policy": {
                "description": "Quota policy and window applied to the credential.",
                "schema": {
                  "type": "string"
                }
              },
              "API-Version": {
                "description": "Compatibility version used for the response.",
                "schema": {
                  "type": "string",
                  "enum": [
                    "1"
                  ]
                }
              },
              "Deprecation": {
                "$ref": "#/components/headers/Deprecation"
              },
              "Sunset": {
                "$ref": "#/components/headers/Sunset"
              },
              "Link": {
                "$ref": "#/components/headers/DeprecationLink"
              },
              "Idempotency-Replayed": {
                "description": "True when a completed response was replayed for the supplied idempotency key.",
                "schema": {
                  "type": "boolean"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "403": {
            "description": "A requested collection is not batch-readable",
            "headers": {
              "RateLimit": {
                "description": "Current quota, remaining requests, and reset time.",
                "schema": {
                  "type": "string"
                }
              },
              "RateLimit-Policy": {
                "description": "Quota policy and window applied to the credential.",
                "schema": {
                  "type": "string"
                }
              },
              "API-Version": {
                "description": "Compatibility version used for the response.",
                "schema": {
                  "type": "string",
                  "enum": [
                    "1"
                  ]
                }
              },
              "Deprecation": {
                "$ref": "#/components/headers/Deprecation"
              },
              "Sunset": {
                "$ref": "#/components/headers/Sunset"
              },
              "Link": {
                "$ref": "#/components/headers/DeprecationLink"
              },
              "Idempotency-Replayed": {
                "description": "True when a completed response was replayed for the supplied idempotency key.",
                "schema": {
                  "type": "boolean"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        },
        "operationId": "postBatch",
        "parameters": [
          {
            "in": "header",
            "name": "API-Version",
            "required": false,
            "description": "Compatibility version. Omit to use version 1; unsupported versions return 400.",
            "schema": {
              "type": "string",
              "enum": [
                "1"
              ],
              "default": "1"
            }
          },
          {
            "in": "header",
            "name": "Idempotency-Key",
            "required": false,
            "description": "Unique retry key retained for 24 hours (maximum 255 characters).",
            "schema": {
              "type": "string",
              "minLength": 1,
              "maxLength": 255
            }
          }
        ]
      }
    },
    "/api/apps/{appId}/google-play/credentials/check": {
      "get": {
        "operationId": "googlePlayPublishingCredentials",
        "summary": "Verify saved Google Play release-read credentials without opening an edit",
        "description": "Requires `releases:read`. Uses the stored service account for this AppSkyline app. Organization-admin session writes are also supported.",
        "tags": [
          "Google Play Publishing"
        ],
        "security": [
          {
            "apiKey": []
          },
          {
            "accessToken": []
          }
        ],
        "parameters": [
          {
            "in": "path",
            "name": "appId",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "track",
            "schema": {
              "type": "string",
              "default": "production"
            }
          },
          {
            "in": "header",
            "name": "API-Version",
            "required": false,
            "description": "Compatibility version. Omit to use version 1; unsupported versions return 400.",
            "schema": {
              "type": "string",
              "enum": [
                "1"
              ],
              "default": "1"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Operation result; includes appId and packageName. Commit is not proof of publication.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": true
                }
              }
            },
            "headers": {
              "RateLimit": {
                "description": "Current quota, remaining requests, and reset time.",
                "schema": {
                  "type": "string"
                }
              },
              "RateLimit-Policy": {
                "description": "Quota policy and window applied to the credential.",
                "schema": {
                  "type": "string"
                }
              },
              "API-Version": {
                "description": "Compatibility version used for the response.",
                "schema": {
                  "type": "string",
                  "enum": [
                    "1"
                  ]
                }
              },
              "Deprecation": {
                "$ref": "#/components/headers/Deprecation"
              },
              "Sunset": {
                "$ref": "#/components/headers/Sunset"
              },
              "Link": {
                "$ref": "#/components/headers/DeprecationLink"
              }
            }
          },
          "400": {
            "description": "Invalid input or Google API error; details retain upstream status and review action",
            "headers": {
              "RateLimit": {
                "description": "Current quota, remaining requests, and reset time.",
                "schema": {
                  "type": "string"
                }
              },
              "RateLimit-Policy": {
                "description": "Quota policy and window applied to the credential.",
                "schema": {
                  "type": "string"
                }
              },
              "API-Version": {
                "description": "Compatibility version used for the response.",
                "schema": {
                  "type": "string",
                  "enum": [
                    "1"
                  ]
                }
              },
              "Deprecation": {
                "$ref": "#/components/headers/Deprecation"
              },
              "Sunset": {
                "$ref": "#/components/headers/Sunset"
              },
              "Link": {
                "$ref": "#/components/headers/DeprecationLink"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "401": {
            "description": "Authentication required",
            "headers": {
              "RateLimit": {
                "description": "Current quota, remaining requests, and reset time.",
                "schema": {
                  "type": "string"
                }
              },
              "RateLimit-Policy": {
                "description": "Quota policy and window applied to the credential.",
                "schema": {
                  "type": "string"
                }
              },
              "API-Version": {
                "description": "Compatibility version used for the response.",
                "schema": {
                  "type": "string",
                  "enum": [
                    "1"
                  ]
                }
              },
              "Deprecation": {
                "$ref": "#/components/headers/Deprecation"
              },
              "Sunset": {
                "$ref": "#/components/headers/Sunset"
              },
              "Link": {
                "$ref": "#/components/headers/DeprecationLink"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "403": {
            "description": "Insufficient scope, app binding, or administrator role",
            "headers": {
              "RateLimit": {
                "description": "Current quota, remaining requests, and reset time.",
                "schema": {
                  "type": "string"
                }
              },
              "RateLimit-Policy": {
                "description": "Quota policy and window applied to the credential.",
                "schema": {
                  "type": "string"
                }
              },
              "API-Version": {
                "description": "Compatibility version used for the response.",
                "schema": {
                  "type": "string",
                  "enum": [
                    "1"
                  ]
                }
              },
              "Deprecation": {
                "$ref": "#/components/headers/Deprecation"
              },
              "Sunset": {
                "$ref": "#/components/headers/Sunset"
              },
              "Link": {
                "$ref": "#/components/headers/DeprecationLink"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "App not found in the authenticated organization",
            "headers": {
              "RateLimit": {
                "description": "Current quota, remaining requests, and reset time.",
                "schema": {
                  "type": "string"
                }
              },
              "RateLimit-Policy": {
                "description": "Quota policy and window applied to the credential.",
                "schema": {
                  "type": "string"
                }
              },
              "API-Version": {
                "description": "Compatibility version used for the response.",
                "schema": {
                  "type": "string",
                  "enum": [
                    "1"
                  ]
                }
              },
              "Deprecation": {
                "$ref": "#/components/headers/Deprecation"
              },
              "Sunset": {
                "$ref": "#/components/headers/Sunset"
              },
              "Link": {
                "$ref": "#/components/headers/DeprecationLink"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/api/apps/{appId}/google-play/releases": {
      "get": {
        "operationId": "googlePlayPublishingReleases",
        "summary": "List Google Play review lifecycle states; policy explanations are unavailable",
        "description": "Requires `releases:read`. Uses the stored service account for this AppSkyline app. Organization-admin session writes are also supported.",
        "tags": [
          "Google Play Publishing"
        ],
        "security": [
          {
            "apiKey": []
          },
          {
            "accessToken": []
          }
        ],
        "parameters": [
          {
            "in": "path",
            "name": "appId",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "track",
            "schema": {
              "type": "string",
              "default": "production"
            }
          },
          {
            "in": "header",
            "name": "API-Version",
            "required": false,
            "description": "Compatibility version. Omit to use version 1; unsupported versions return 400.",
            "schema": {
              "type": "string",
              "enum": [
                "1"
              ],
              "default": "1"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Operation result; includes appId and packageName. Commit is not proof of publication.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": true
                }
              }
            },
            "headers": {
              "RateLimit": {
                "description": "Current quota, remaining requests, and reset time.",
                "schema": {
                  "type": "string"
                }
              },
              "RateLimit-Policy": {
                "description": "Quota policy and window applied to the credential.",
                "schema": {
                  "type": "string"
                }
              },
              "API-Version": {
                "description": "Compatibility version used for the response.",
                "schema": {
                  "type": "string",
                  "enum": [
                    "1"
                  ]
                }
              },
              "Deprecation": {
                "$ref": "#/components/headers/Deprecation"
              },
              "Sunset": {
                "$ref": "#/components/headers/Sunset"
              },
              "Link": {
                "$ref": "#/components/headers/DeprecationLink"
              }
            }
          },
          "400": {
            "description": "Invalid input or Google API error; details retain upstream status and review action",
            "headers": {
              "RateLimit": {
                "description": "Current quota, remaining requests, and reset time.",
                "schema": {
                  "type": "string"
                }
              },
              "RateLimit-Policy": {
                "description": "Quota policy and window applied to the credential.",
                "schema": {
                  "type": "string"
                }
              },
              "API-Version": {
                "description": "Compatibility version used for the response.",
                "schema": {
                  "type": "string",
                  "enum": [
                    "1"
                  ]
                }
              },
              "Deprecation": {
                "$ref": "#/components/headers/Deprecation"
              },
              "Sunset": {
                "$ref": "#/components/headers/Sunset"
              },
              "Link": {
                "$ref": "#/components/headers/DeprecationLink"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "401": {
            "description": "Authentication required",
            "headers": {
              "RateLimit": {
                "description": "Current quota, remaining requests, and reset time.",
                "schema": {
                  "type": "string"
                }
              },
              "RateLimit-Policy": {
                "description": "Quota policy and window applied to the credential.",
                "schema": {
                  "type": "string"
                }
              },
              "API-Version": {
                "description": "Compatibility version used for the response.",
                "schema": {
                  "type": "string",
                  "enum": [
                    "1"
                  ]
                }
              },
              "Deprecation": {
                "$ref": "#/components/headers/Deprecation"
              },
              "Sunset": {
                "$ref": "#/components/headers/Sunset"
              },
              "Link": {
                "$ref": "#/components/headers/DeprecationLink"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "403": {
            "description": "Insufficient scope, app binding, or administrator role",
            "headers": {
              "RateLimit": {
                "description": "Current quota, remaining requests, and reset time.",
                "schema": {
                  "type": "string"
                }
              },
              "RateLimit-Policy": {
                "description": "Quota policy and window applied to the credential.",
                "schema": {
                  "type": "string"
                }
              },
              "API-Version": {
                "description": "Compatibility version used for the response.",
                "schema": {
                  "type": "string",
                  "enum": [
                    "1"
                  ]
                }
              },
              "Deprecation": {
                "$ref": "#/components/headers/Deprecation"
              },
              "Sunset": {
                "$ref": "#/components/headers/Sunset"
              },
              "Link": {
                "$ref": "#/components/headers/DeprecationLink"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "App not found in the authenticated organization",
            "headers": {
              "RateLimit": {
                "description": "Current quota, remaining requests, and reset time.",
                "schema": {
                  "type": "string"
                }
              },
              "RateLimit-Policy": {
                "description": "Quota policy and window applied to the credential.",
                "schema": {
                  "type": "string"
                }
              },
              "API-Version": {
                "description": "Compatibility version used for the response.",
                "schema": {
                  "type": "string",
                  "enum": [
                    "1"
                  ]
                }
              },
              "Deprecation": {
                "$ref": "#/components/headers/Deprecation"
              },
              "Sunset": {
                "$ref": "#/components/headers/Sunset"
              },
              "Link": {
                "$ref": "#/components/headers/DeprecationLink"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/api/apps/{appId}/google-play/release/plan": {
      "post": {
        "operationId": "googlePlayPublishingPlan",
        "summary": "Preview full track release replacement without writing",
        "description": "Requires `releases:read`. Uses the stored service account for this AppSkyline app. Organization-admin session writes are also supported.",
        "tags": [
          "Google Play Publishing"
        ],
        "security": [
          {
            "apiKey": []
          },
          {
            "accessToken": []
          }
        ],
        "parameters": [
          {
            "in": "path",
            "name": "appId",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "track",
            "schema": {
              "type": "string",
              "default": "production"
            }
          },
          {
            "in": "header",
            "name": "API-Version",
            "required": false,
            "description": "Compatibility version. Omit to use version 1; unsupported versions return 400.",
            "schema": {
              "type": "string",
              "enum": [
                "1"
              ],
              "default": "1"
            }
          },
          {
            "in": "header",
            "name": "Idempotency-Key",
            "required": false,
            "description": "Unique retry key retained for 24 hours (maximum 255 characters).",
            "schema": {
              "type": "string",
              "minLength": 1,
              "maxLength": 255
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Operation result; includes appId and packageName. Commit is not proof of publication.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": true
                }
              }
            },
            "headers": {
              "RateLimit": {
                "description": "Current quota, remaining requests, and reset time.",
                "schema": {
                  "type": "string"
                }
              },
              "RateLimit-Policy": {
                "description": "Quota policy and window applied to the credential.",
                "schema": {
                  "type": "string"
                }
              },
              "API-Version": {
                "description": "Compatibility version used for the response.",
                "schema": {
                  "type": "string",
                  "enum": [
                    "1"
                  ]
                }
              },
              "Deprecation": {
                "$ref": "#/components/headers/Deprecation"
              },
              "Sunset": {
                "$ref": "#/components/headers/Sunset"
              },
              "Link": {
                "$ref": "#/components/headers/DeprecationLink"
              },
              "Idempotency-Replayed": {
                "description": "True when a completed response was replayed for the supplied idempotency key.",
                "schema": {
                  "type": "boolean"
                }
              }
            }
          },
          "400": {
            "description": "Invalid input or Google API error; details retain upstream status and review action",
            "headers": {
              "RateLimit": {
                "description": "Current quota, remaining requests, and reset time.",
                "schema": {
                  "type": "string"
                }
              },
              "RateLimit-Policy": {
                "description": "Quota policy and window applied to the credential.",
                "schema": {
                  "type": "string"
                }
              },
              "API-Version": {
                "description": "Compatibility version used for the response.",
                "schema": {
                  "type": "string",
                  "enum": [
                    "1"
                  ]
                }
              },
              "Deprecation": {
                "$ref": "#/components/headers/Deprecation"
              },
              "Sunset": {
                "$ref": "#/components/headers/Sunset"
              },
              "Link": {
                "$ref": "#/components/headers/DeprecationLink"
              },
              "Idempotency-Replayed": {
                "description": "True when a completed response was replayed for the supplied idempotency key.",
                "schema": {
                  "type": "boolean"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "401": {
            "description": "Authentication required",
            "headers": {
              "RateLimit": {
                "description": "Current quota, remaining requests, and reset time.",
                "schema": {
                  "type": "string"
                }
              },
              "RateLimit-Policy": {
                "description": "Quota policy and window applied to the credential.",
                "schema": {
                  "type": "string"
                }
              },
              "API-Version": {
                "description": "Compatibility version used for the response.",
                "schema": {
                  "type": "string",
                  "enum": [
                    "1"
                  ]
                }
              },
              "Deprecation": {
                "$ref": "#/components/headers/Deprecation"
              },
              "Sunset": {
                "$ref": "#/components/headers/Sunset"
              },
              "Link": {
                "$ref": "#/components/headers/DeprecationLink"
              },
              "Idempotency-Replayed": {
                "description": "True when a completed response was replayed for the supplied idempotency key.",
                "schema": {
                  "type": "boolean"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "403": {
            "description": "Insufficient scope, app binding, or administrator role",
            "headers": {
              "RateLimit": {
                "description": "Current quota, remaining requests, and reset time.",
                "schema": {
                  "type": "string"
                }
              },
              "RateLimit-Policy": {
                "description": "Quota policy and window applied to the credential.",
                "schema": {
                  "type": "string"
                }
              },
              "API-Version": {
                "description": "Compatibility version used for the response.",
                "schema": {
                  "type": "string",
                  "enum": [
                    "1"
                  ]
                }
              },
              "Deprecation": {
                "$ref": "#/components/headers/Deprecation"
              },
              "Sunset": {
                "$ref": "#/components/headers/Sunset"
              },
              "Link": {
                "$ref": "#/components/headers/DeprecationLink"
              },
              "Idempotency-Replayed": {
                "description": "True when a completed response was replayed for the supplied idempotency key.",
                "schema": {
                  "type": "boolean"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "App not found in the authenticated organization",
            "headers": {
              "RateLimit": {
                "description": "Current quota, remaining requests, and reset time.",
                "schema": {
                  "type": "string"
                }
              },
              "RateLimit-Policy": {
                "description": "Quota policy and window applied to the credential.",
                "schema": {
                  "type": "string"
                }
              },
              "API-Version": {
                "description": "Compatibility version used for the response.",
                "schema": {
                  "type": "string",
                  "enum": [
                    "1"
                  ]
                }
              },
              "Deprecation": {
                "$ref": "#/components/headers/Deprecation"
              },
              "Sunset": {
                "$ref": "#/components/headers/Sunset"
              },
              "Link": {
                "$ref": "#/components/headers/DeprecationLink"
              },
              "Idempotency-Replayed": {
                "description": "True when a completed response was replayed for the supplied idempotency key.",
                "schema": {
                  "type": "boolean"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "versionCodes"
                ],
                "properties": {
                  "versionCodes": {
                    "type": "array",
                    "minItems": 1,
                    "maxItems": 100,
                    "items": {
                      "type": "string",
                      "pattern": "^[1-9][0-9]*$"
                    }
                  },
                  "status": {
                    "type": "string",
                    "enum": [
                      "draft",
                      "completed",
                      "inProgress",
                      "halted"
                    ],
                    "default": "completed"
                  },
                  "userFraction": {
                    "type": "number",
                    "minimum": 0,
                    "maximum": 1,
                    "exclusiveMinimum": true,
                    "exclusiveMaximum": true
                  },
                  "name": {
                    "type": "string",
                    "maxLength": 200
                  },
                  "releaseNotes": {
                    "type": "array",
                    "items": {
                      "type": "object",
                      "required": [
                        "language",
                        "text"
                      ],
                      "properties": {
                        "language": {
                          "type": "string"
                        },
                        "text": {
                          "type": "string",
                          "maxLength": 500
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/api/apps/{appId}/google-play/edits": {
      "post": {
        "operationId": "googlePlayPublishingCreate",
        "summary": "Open a Google Play edit; may invalidate an earlier edit",
        "description": "Requires `releases:write`. Uses the stored service account for this AppSkyline app. Organization-admin session writes are also supported.",
        "tags": [
          "Google Play Publishing"
        ],
        "security": [
          {
            "apiKey": []
          },
          {
            "accessToken": []
          }
        ],
        "parameters": [
          {
            "in": "path",
            "name": "appId",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "header",
            "name": "API-Version",
            "required": false,
            "description": "Compatibility version. Omit to use version 1; unsupported versions return 400.",
            "schema": {
              "type": "string",
              "enum": [
                "1"
              ],
              "default": "1"
            }
          },
          {
            "in": "header",
            "name": "Idempotency-Key",
            "required": false,
            "description": "Unique retry key retained for 24 hours (maximum 255 characters).",
            "schema": {
              "type": "string",
              "minLength": 1,
              "maxLength": 255
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Operation result; includes appId and packageName. Commit is not proof of publication.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": true
                }
              }
            },
            "headers": {
              "RateLimit": {
                "description": "Current quota, remaining requests, and reset time.",
                "schema": {
                  "type": "string"
                }
              },
              "RateLimit-Policy": {
                "description": "Quota policy and window applied to the credential.",
                "schema": {
                  "type": "string"
                }
              },
              "API-Version": {
                "description": "Compatibility version used for the response.",
                "schema": {
                  "type": "string",
                  "enum": [
                    "1"
                  ]
                }
              },
              "Deprecation": {
                "$ref": "#/components/headers/Deprecation"
              },
              "Sunset": {
                "$ref": "#/components/headers/Sunset"
              },
              "Link": {
                "$ref": "#/components/headers/DeprecationLink"
              },
              "Idempotency-Replayed": {
                "description": "True when a completed response was replayed for the supplied idempotency key.",
                "schema": {
                  "type": "boolean"
                }
              }
            }
          },
          "400": {
            "description": "Invalid input or Google API error; details retain upstream status and review action",
            "headers": {
              "RateLimit": {
                "description": "Current quota, remaining requests, and reset time.",
                "schema": {
                  "type": "string"
                }
              },
              "RateLimit-Policy": {
                "description": "Quota policy and window applied to the credential.",
                "schema": {
                  "type": "string"
                }
              },
              "API-Version": {
                "description": "Compatibility version used for the response.",
                "schema": {
                  "type": "string",
                  "enum": [
                    "1"
                  ]
                }
              },
              "Deprecation": {
                "$ref": "#/components/headers/Deprecation"
              },
              "Sunset": {
                "$ref": "#/components/headers/Sunset"
              },
              "Link": {
                "$ref": "#/components/headers/DeprecationLink"
              },
              "Idempotency-Replayed": {
                "description": "True when a completed response was replayed for the supplied idempotency key.",
                "schema": {
                  "type": "boolean"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "401": {
            "description": "Authentication required",
            "headers": {
              "RateLimit": {
                "description": "Current quota, remaining requests, and reset time.",
                "schema": {
                  "type": "string"
                }
              },
              "RateLimit-Policy": {
                "description": "Quota policy and window applied to the credential.",
                "schema": {
                  "type": "string"
                }
              },
              "API-Version": {
                "description": "Compatibility version used for the response.",
                "schema": {
                  "type": "string",
                  "enum": [
                    "1"
                  ]
                }
              },
              "Deprecation": {
                "$ref": "#/components/headers/Deprecation"
              },
              "Sunset": {
                "$ref": "#/components/headers/Sunset"
              },
              "Link": {
                "$ref": "#/components/headers/DeprecationLink"
              },
              "Idempotency-Replayed": {
                "description": "True when a completed response was replayed for the supplied idempotency key.",
                "schema": {
                  "type": "boolean"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "403": {
            "description": "Insufficient scope, app binding, or administrator role",
            "headers": {
              "RateLimit": {
                "description": "Current quota, remaining requests, and reset time.",
                "schema": {
                  "type": "string"
                }
              },
              "RateLimit-Policy": {
                "description": "Quota policy and window applied to the credential.",
                "schema": {
                  "type": "string"
                }
              },
              "API-Version": {
                "description": "Compatibility version used for the response.",
                "schema": {
                  "type": "string",
                  "enum": [
                    "1"
                  ]
                }
              },
              "Deprecation": {
                "$ref": "#/components/headers/Deprecation"
              },
              "Sunset": {
                "$ref": "#/components/headers/Sunset"
              },
              "Link": {
                "$ref": "#/components/headers/DeprecationLink"
              },
              "Idempotency-Replayed": {
                "description": "True when a completed response was replayed for the supplied idempotency key.",
                "schema": {
                  "type": "boolean"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "App not found in the authenticated organization",
            "headers": {
              "RateLimit": {
                "description": "Current quota, remaining requests, and reset time.",
                "schema": {
                  "type": "string"
                }
              },
              "RateLimit-Policy": {
                "description": "Quota policy and window applied to the credential.",
                "schema": {
                  "type": "string"
                }
              },
              "API-Version": {
                "description": "Compatibility version used for the response.",
                "schema": {
                  "type": "string",
                  "enum": [
                    "1"
                  ]
                }
              },
              "Deprecation": {
                "$ref": "#/components/headers/Deprecation"
              },
              "Sunset": {
                "$ref": "#/components/headers/Sunset"
              },
              "Link": {
                "$ref": "#/components/headers/DeprecationLink"
              },
              "Idempotency-Replayed": {
                "description": "True when a completed response was replayed for the supplied idempotency key.",
                "schema": {
                  "type": "boolean"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/api/apps/{appId}/google-play/edits/{editId}": {
      "get": {
        "operationId": "googlePlayPublishingGet",
        "summary": "Read an edit",
        "description": "Requires `releases:read`. Uses the stored service account for this AppSkyline app. Organization-admin session writes are also supported.",
        "tags": [
          "Google Play Publishing"
        ],
        "security": [
          {
            "apiKey": []
          },
          {
            "accessToken": []
          }
        ],
        "parameters": [
          {
            "in": "path",
            "name": "appId",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "path",
            "name": "editId",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "header",
            "name": "API-Version",
            "required": false,
            "description": "Compatibility version. Omit to use version 1; unsupported versions return 400.",
            "schema": {
              "type": "string",
              "enum": [
                "1"
              ],
              "default": "1"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Operation result; includes appId and packageName. Commit is not proof of publication.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": true
                }
              }
            },
            "headers": {
              "RateLimit": {
                "description": "Current quota, remaining requests, and reset time.",
                "schema": {
                  "type": "string"
                }
              },
              "RateLimit-Policy": {
                "description": "Quota policy and window applied to the credential.",
                "schema": {
                  "type": "string"
                }
              },
              "API-Version": {
                "description": "Compatibility version used for the response.",
                "schema": {
                  "type": "string",
                  "enum": [
                    "1"
                  ]
                }
              },
              "Deprecation": {
                "$ref": "#/components/headers/Deprecation"
              },
              "Sunset": {
                "$ref": "#/components/headers/Sunset"
              },
              "Link": {
                "$ref": "#/components/headers/DeprecationLink"
              }
            }
          },
          "400": {
            "description": "Invalid input or Google API error; details retain upstream status and review action",
            "headers": {
              "RateLimit": {
                "description": "Current quota, remaining requests, and reset time.",
                "schema": {
                  "type": "string"
                }
              },
              "RateLimit-Policy": {
                "description": "Quota policy and window applied to the credential.",
                "schema": {
                  "type": "string"
                }
              },
              "API-Version": {
                "description": "Compatibility version used for the response.",
                "schema": {
                  "type": "string",
                  "enum": [
                    "1"
                  ]
                }
              },
              "Deprecation": {
                "$ref": "#/components/headers/Deprecation"
              },
              "Sunset": {
                "$ref": "#/components/headers/Sunset"
              },
              "Link": {
                "$ref": "#/components/headers/DeprecationLink"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "401": {
            "description": "Authentication required",
            "headers": {
              "RateLimit": {
                "description": "Current quota, remaining requests, and reset time.",
                "schema": {
                  "type": "string"
                }
              },
              "RateLimit-Policy": {
                "description": "Quota policy and window applied to the credential.",
                "schema": {
                  "type": "string"
                }
              },
              "API-Version": {
                "description": "Compatibility version used for the response.",
                "schema": {
                  "type": "string",
                  "enum": [
                    "1"
                  ]
                }
              },
              "Deprecation": {
                "$ref": "#/components/headers/Deprecation"
              },
              "Sunset": {
                "$ref": "#/components/headers/Sunset"
              },
              "Link": {
                "$ref": "#/components/headers/DeprecationLink"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "403": {
            "description": "Insufficient scope, app binding, or administrator role",
            "headers": {
              "RateLimit": {
                "description": "Current quota, remaining requests, and reset time.",
                "schema": {
                  "type": "string"
                }
              },
              "RateLimit-Policy": {
                "description": "Quota policy and window applied to the credential.",
                "schema": {
                  "type": "string"
                }
              },
              "API-Version": {
                "description": "Compatibility version used for the response.",
                "schema": {
                  "type": "string",
                  "enum": [
                    "1"
                  ]
                }
              },
              "Deprecation": {
                "$ref": "#/components/headers/Deprecation"
              },
              "Sunset": {
                "$ref": "#/components/headers/Sunset"
              },
              "Link": {
                "$ref": "#/components/headers/DeprecationLink"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "App not found in the authenticated organization",
            "headers": {
              "RateLimit": {
                "description": "Current quota, remaining requests, and reset time.",
                "schema": {
                  "type": "string"
                }
              },
              "RateLimit-Policy": {
                "description": "Quota policy and window applied to the credential.",
                "schema": {
                  "type": "string"
                }
              },
              "API-Version": {
                "description": "Compatibility version used for the response.",
                "schema": {
                  "type": "string",
                  "enum": [
                    "1"
                  ]
                }
              },
              "Deprecation": {
                "$ref": "#/components/headers/Deprecation"
              },
              "Sunset": {
                "$ref": "#/components/headers/Sunset"
              },
              "Link": {
                "$ref": "#/components/headers/DeprecationLink"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      },
      "delete": {
        "operationId": "googlePlayPublishingDelete",
        "summary": "Discard an edit",
        "description": "Requires `releases:write`. Uses the stored service account for this AppSkyline app. Organization-admin session writes are also supported.",
        "tags": [
          "Google Play Publishing"
        ],
        "security": [
          {
            "apiKey": []
          },
          {
            "accessToken": []
          }
        ],
        "parameters": [
          {
            "in": "path",
            "name": "appId",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "path",
            "name": "editId",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "header",
            "name": "API-Version",
            "required": false,
            "description": "Compatibility version. Omit to use version 1; unsupported versions return 400.",
            "schema": {
              "type": "string",
              "enum": [
                "1"
              ],
              "default": "1"
            }
          },
          {
            "in": "header",
            "name": "Idempotency-Key",
            "required": false,
            "description": "Unique retry key retained for 24 hours (maximum 255 characters).",
            "schema": {
              "type": "string",
              "minLength": 1,
              "maxLength": 255
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Operation result; includes appId and packageName. Commit is not proof of publication.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": true
                }
              }
            },
            "headers": {
              "RateLimit": {
                "description": "Current quota, remaining requests, and reset time.",
                "schema": {
                  "type": "string"
                }
              },
              "RateLimit-Policy": {
                "description": "Quota policy and window applied to the credential.",
                "schema": {
                  "type": "string"
                }
              },
              "API-Version": {
                "description": "Compatibility version used for the response.",
                "schema": {
                  "type": "string",
                  "enum": [
                    "1"
                  ]
                }
              },
              "Deprecation": {
                "$ref": "#/components/headers/Deprecation"
              },
              "Sunset": {
                "$ref": "#/components/headers/Sunset"
              },
              "Link": {
                "$ref": "#/components/headers/DeprecationLink"
              },
              "Idempotency-Replayed": {
                "description": "True when a completed response was replayed for the supplied idempotency key.",
                "schema": {
                  "type": "boolean"
                }
              }
            }
          },
          "400": {
            "description": "Invalid input or Google API error; details retain upstream status and review action",
            "headers": {
              "RateLimit": {
                "description": "Current quota, remaining requests, and reset time.",
                "schema": {
                  "type": "string"
                }
              },
              "RateLimit-Policy": {
                "description": "Quota policy and window applied to the credential.",
                "schema": {
                  "type": "string"
                }
              },
              "API-Version": {
                "description": "Compatibility version used for the response.",
                "schema": {
                  "type": "string",
                  "enum": [
                    "1"
                  ]
                }
              },
              "Deprecation": {
                "$ref": "#/components/headers/Deprecation"
              },
              "Sunset": {
                "$ref": "#/components/headers/Sunset"
              },
              "Link": {
                "$ref": "#/components/headers/DeprecationLink"
              },
              "Idempotency-Replayed": {
                "description": "True when a completed response was replayed for the supplied idempotency key.",
                "schema": {
                  "type": "boolean"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "401": {
            "description": "Authentication required",
            "headers": {
              "RateLimit": {
                "description": "Current quota, remaining requests, and reset time.",
                "schema": {
                  "type": "string"
                }
              },
              "RateLimit-Policy": {
                "description": "Quota policy and window applied to the credential.",
                "schema": {
                  "type": "string"
                }
              },
              "API-Version": {
                "description": "Compatibility version used for the response.",
                "schema": {
                  "type": "string",
                  "enum": [
                    "1"
                  ]
                }
              },
              "Deprecation": {
                "$ref": "#/components/headers/Deprecation"
              },
              "Sunset": {
                "$ref": "#/components/headers/Sunset"
              },
              "Link": {
                "$ref": "#/components/headers/DeprecationLink"
              },
              "Idempotency-Replayed": {
                "description": "True when a completed response was replayed for the supplied idempotency key.",
                "schema": {
                  "type": "boolean"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "403": {
            "description": "Insufficient scope, app binding, or administrator role",
            "headers": {
              "RateLimit": {
                "description": "Current quota, remaining requests, and reset time.",
                "schema": {
                  "type": "string"
                }
              },
              "RateLimit-Policy": {
                "description": "Quota policy and window applied to the credential.",
                "schema": {
                  "type": "string"
                }
              },
              "API-Version": {
                "description": "Compatibility version used for the response.",
                "schema": {
                  "type": "string",
                  "enum": [
                    "1"
                  ]
                }
              },
              "Deprecation": {
                "$ref": "#/components/headers/Deprecation"
              },
              "Sunset": {
                "$ref": "#/components/headers/Sunset"
              },
              "Link": {
                "$ref": "#/components/headers/DeprecationLink"
              },
              "Idempotency-Replayed": {
                "description": "True when a completed response was replayed for the supplied idempotency key.",
                "schema": {
                  "type": "boolean"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "App not found in the authenticated organization",
            "headers": {
              "RateLimit": {
                "description": "Current quota, remaining requests, and reset time.",
                "schema": {
                  "type": "string"
                }
              },
              "RateLimit-Policy": {
                "description": "Quota policy and window applied to the credential.",
                "schema": {
                  "type": "string"
                }
              },
              "API-Version": {
                "description": "Compatibility version used for the response.",
                "schema": {
                  "type": "string",
                  "enum": [
                    "1"
                  ]
                }
              },
              "Deprecation": {
                "$ref": "#/components/headers/Deprecation"
              },
              "Sunset": {
                "$ref": "#/components/headers/Sunset"
              },
              "Link": {
                "$ref": "#/components/headers/DeprecationLink"
              },
              "Idempotency-Replayed": {
                "description": "True when a completed response was replayed for the supplied idempotency key.",
                "schema": {
                  "type": "boolean"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/api/apps/{appId}/google-play/edits/{editId}/validate": {
      "post": {
        "operationId": "googlePlayPublishingValidate",
        "summary": "Validate an edit without committing",
        "description": "Requires `releases:write`. Uses the stored service account for this AppSkyline app. Organization-admin session writes are also supported.",
        "tags": [
          "Google Play Publishing"
        ],
        "security": [
          {
            "apiKey": []
          },
          {
            "accessToken": []
          }
        ],
        "parameters": [
          {
            "in": "path",
            "name": "appId",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "path",
            "name": "editId",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "header",
            "name": "API-Version",
            "required": false,
            "description": "Compatibility version. Omit to use version 1; unsupported versions return 400.",
            "schema": {
              "type": "string",
              "enum": [
                "1"
              ],
              "default": "1"
            }
          },
          {
            "in": "header",
            "name": "Idempotency-Key",
            "required": false,
            "description": "Unique retry key retained for 24 hours (maximum 255 characters).",
            "schema": {
              "type": "string",
              "minLength": 1,
              "maxLength": 255
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Operation result; includes appId and packageName. Commit is not proof of publication.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": true
                }
              }
            },
            "headers": {
              "RateLimit": {
                "description": "Current quota, remaining requests, and reset time.",
                "schema": {
                  "type": "string"
                }
              },
              "RateLimit-Policy": {
                "description": "Quota policy and window applied to the credential.",
                "schema": {
                  "type": "string"
                }
              },
              "API-Version": {
                "description": "Compatibility version used for the response.",
                "schema": {
                  "type": "string",
                  "enum": [
                    "1"
                  ]
                }
              },
              "Deprecation": {
                "$ref": "#/components/headers/Deprecation"
              },
              "Sunset": {
                "$ref": "#/components/headers/Sunset"
              },
              "Link": {
                "$ref": "#/components/headers/DeprecationLink"
              },
              "Idempotency-Replayed": {
                "description": "True when a completed response was replayed for the supplied idempotency key.",
                "schema": {
                  "type": "boolean"
                }
              }
            }
          },
          "400": {
            "description": "Invalid input or Google API error; details retain upstream status and review action",
            "headers": {
              "RateLimit": {
                "description": "Current quota, remaining requests, and reset time.",
                "schema": {
                  "type": "string"
                }
              },
              "RateLimit-Policy": {
                "description": "Quota policy and window applied to the credential.",
                "schema": {
                  "type": "string"
                }
              },
              "API-Version": {
                "description": "Compatibility version used for the response.",
                "schema": {
                  "type": "string",
                  "enum": [
                    "1"
                  ]
                }
              },
              "Deprecation": {
                "$ref": "#/components/headers/Deprecation"
              },
              "Sunset": {
                "$ref": "#/components/headers/Sunset"
              },
              "Link": {
                "$ref": "#/components/headers/DeprecationLink"
              },
              "Idempotency-Replayed": {
                "description": "True when a completed response was replayed for the supplied idempotency key.",
                "schema": {
                  "type": "boolean"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "401": {
            "description": "Authentication required",
            "headers": {
              "RateLimit": {
                "description": "Current quota, remaining requests, and reset time.",
                "schema": {
                  "type": "string"
                }
              },
              "RateLimit-Policy": {
                "description": "Quota policy and window applied to the credential.",
                "schema": {
                  "type": "string"
                }
              },
              "API-Version": {
                "description": "Compatibility version used for the response.",
                "schema": {
                  "type": "string",
                  "enum": [
                    "1"
                  ]
                }
              },
              "Deprecation": {
                "$ref": "#/components/headers/Deprecation"
              },
              "Sunset": {
                "$ref": "#/components/headers/Sunset"
              },
              "Link": {
                "$ref": "#/components/headers/DeprecationLink"
              },
              "Idempotency-Replayed": {
                "description": "True when a completed response was replayed for the supplied idempotency key.",
                "schema": {
                  "type": "boolean"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "403": {
            "description": "Insufficient scope, app binding, or administrator role",
            "headers": {
              "RateLimit": {
                "description": "Current quota, remaining requests, and reset time.",
                "schema": {
                  "type": "string"
                }
              },
              "RateLimit-Policy": {
                "description": "Quota policy and window applied to the credential.",
                "schema": {
                  "type": "string"
                }
              },
              "API-Version": {
                "description": "Compatibility version used for the response.",
                "schema": {
                  "type": "string",
                  "enum": [
                    "1"
                  ]
                }
              },
              "Deprecation": {
                "$ref": "#/components/headers/Deprecation"
              },
              "Sunset": {
                "$ref": "#/components/headers/Sunset"
              },
              "Link": {
                "$ref": "#/components/headers/DeprecationLink"
              },
              "Idempotency-Replayed": {
                "description": "True when a completed response was replayed for the supplied idempotency key.",
                "schema": {
                  "type": "boolean"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "App not found in the authenticated organization",
            "headers": {
              "RateLimit": {
                "description": "Current quota, remaining requests, and reset time.",
                "schema": {
                  "type": "string"
                }
              },
              "RateLimit-Policy": {
                "description": "Quota policy and window applied to the credential.",
                "schema": {
                  "type": "string"
                }
              },
              "API-Version": {
                "description": "Compatibility version used for the response.",
                "schema": {
                  "type": "string",
                  "enum": [
                    "1"
                  ]
                }
              },
              "Deprecation": {
                "$ref": "#/components/headers/Deprecation"
              },
              "Sunset": {
                "$ref": "#/components/headers/Sunset"
              },
              "Link": {
                "$ref": "#/components/headers/DeprecationLink"
              },
              "Idempotency-Replayed": {
                "description": "True when a completed response was replayed for the supplied idempotency key.",
                "schema": {
                  "type": "boolean"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/api/apps/{appId}/google-play/edits/{editId}/bundles": {
      "get": {
        "operationId": "googlePlayPublishingBundles",
        "summary": "List bundles within an edit",
        "description": "Requires `releases:read`. Uses the stored service account for this AppSkyline app. Organization-admin session writes are also supported.",
        "tags": [
          "Google Play Publishing"
        ],
        "security": [
          {
            "apiKey": []
          },
          {
            "accessToken": []
          }
        ],
        "parameters": [
          {
            "in": "path",
            "name": "appId",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "path",
            "name": "editId",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "header",
            "name": "API-Version",
            "required": false,
            "description": "Compatibility version. Omit to use version 1; unsupported versions return 400.",
            "schema": {
              "type": "string",
              "enum": [
                "1"
              ],
              "default": "1"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Operation result; includes appId and packageName. Commit is not proof of publication.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": true
                }
              }
            },
            "headers": {
              "RateLimit": {
                "description": "Current quota, remaining requests, and reset time.",
                "schema": {
                  "type": "string"
                }
              },
              "RateLimit-Policy": {
                "description": "Quota policy and window applied to the credential.",
                "schema": {
                  "type": "string"
                }
              },
              "API-Version": {
                "description": "Compatibility version used for the response.",
                "schema": {
                  "type": "string",
                  "enum": [
                    "1"
                  ]
                }
              },
              "Deprecation": {
                "$ref": "#/components/headers/Deprecation"
              },
              "Sunset": {
                "$ref": "#/components/headers/Sunset"
              },
              "Link": {
                "$ref": "#/components/headers/DeprecationLink"
              }
            }
          },
          "400": {
            "description": "Invalid input or Google API error; details retain upstream status and review action",
            "headers": {
              "RateLimit": {
                "description": "Current quota, remaining requests, and reset time.",
                "schema": {
                  "type": "string"
                }
              },
              "RateLimit-Policy": {
                "description": "Quota policy and window applied to the credential.",
                "schema": {
                  "type": "string"
                }
              },
              "API-Version": {
                "description": "Compatibility version used for the response.",
                "schema": {
                  "type": "string",
                  "enum": [
                    "1"
                  ]
                }
              },
              "Deprecation": {
                "$ref": "#/components/headers/Deprecation"
              },
              "Sunset": {
                "$ref": "#/components/headers/Sunset"
              },
              "Link": {
                "$ref": "#/components/headers/DeprecationLink"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "401": {
            "description": "Authentication required",
            "headers": {
              "RateLimit": {
                "description": "Current quota, remaining requests, and reset time.",
                "schema": {
                  "type": "string"
                }
              },
              "RateLimit-Policy": {
                "description": "Quota policy and window applied to the credential.",
                "schema": {
                  "type": "string"
                }
              },
              "API-Version": {
                "description": "Compatibility version used for the response.",
                "schema": {
                  "type": "string",
                  "enum": [
                    "1"
                  ]
                }
              },
              "Deprecation": {
                "$ref": "#/components/headers/Deprecation"
              },
              "Sunset": {
                "$ref": "#/components/headers/Sunset"
              },
              "Link": {
                "$ref": "#/components/headers/DeprecationLink"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "403": {
            "description": "Insufficient scope, app binding, or administrator role",
            "headers": {
              "RateLimit": {
                "description": "Current quota, remaining requests, and reset time.",
                "schema": {
                  "type": "string"
                }
              },
              "RateLimit-Policy": {
                "description": "Quota policy and window applied to the credential.",
                "schema": {
                  "type": "string"
                }
              },
              "API-Version": {
                "description": "Compatibility version used for the response.",
                "schema": {
                  "type": "string",
                  "enum": [
                    "1"
                  ]
                }
              },
              "Deprecation": {
                "$ref": "#/components/headers/Deprecation"
              },
              "Sunset": {
                "$ref": "#/components/headers/Sunset"
              },
              "Link": {
                "$ref": "#/components/headers/DeprecationLink"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "App not found in the authenticated organization",
            "headers": {
              "RateLimit": {
                "description": "Current quota, remaining requests, and reset time.",
                "schema": {
                  "type": "string"
                }
              },
              "RateLimit-Policy": {
                "description": "Quota policy and window applied to the credential.",
                "schema": {
                  "type": "string"
                }
              },
              "API-Version": {
                "description": "Compatibility version used for the response.",
                "schema": {
                  "type": "string",
                  "enum": [
                    "1"
                  ]
                }
              },
              "Deprecation": {
                "$ref": "#/components/headers/Deprecation"
              },
              "Sunset": {
                "$ref": "#/components/headers/Sunset"
              },
              "Link": {
                "$ref": "#/components/headers/DeprecationLink"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/api/apps/{appId}/google-play/edits/{editId}/bundle-upload": {
      "post": {
        "operationId": "googlePlayPublishingUpload",
        "summary": "Start a resumable AAB upload directly to Google",
        "description": "Requires `releases:write`. Uses the stored service account for this AppSkyline app. Organization-admin session writes are also supported. Returns a secret uploadUrl capability, never OAuth credentials. PUT AAB bytes directly to that URL; do not log it. The edit is not committed.",
        "tags": [
          "Google Play Publishing"
        ],
        "security": [
          {
            "apiKey": []
          },
          {
            "accessToken": []
          }
        ],
        "parameters": [
          {
            "in": "path",
            "name": "appId",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "path",
            "name": "editId",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "header",
            "name": "API-Version",
            "required": false,
            "description": "Compatibility version. Omit to use version 1; unsupported versions return 400.",
            "schema": {
              "type": "string",
              "enum": [
                "1"
              ],
              "default": "1"
            }
          },
          {
            "in": "header",
            "name": "Idempotency-Key",
            "required": false,
            "description": "Unique retry key retained for 24 hours (maximum 255 characters).",
            "schema": {
              "type": "string",
              "minLength": 1,
              "maxLength": 255
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Operation result; includes appId and packageName. Commit is not proof of publication.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": true
                }
              }
            },
            "headers": {
              "RateLimit": {
                "description": "Current quota, remaining requests, and reset time.",
                "schema": {
                  "type": "string"
                }
              },
              "RateLimit-Policy": {
                "description": "Quota policy and window applied to the credential.",
                "schema": {
                  "type": "string"
                }
              },
              "API-Version": {
                "description": "Compatibility version used for the response.",
                "schema": {
                  "type": "string",
                  "enum": [
                    "1"
                  ]
                }
              },
              "Deprecation": {
                "$ref": "#/components/headers/Deprecation"
              },
              "Sunset": {
                "$ref": "#/components/headers/Sunset"
              },
              "Link": {
                "$ref": "#/components/headers/DeprecationLink"
              },
              "Idempotency-Replayed": {
                "description": "True when a completed response was replayed for the supplied idempotency key.",
                "schema": {
                  "type": "boolean"
                }
              }
            }
          },
          "400": {
            "description": "Invalid input or Google API error; details retain upstream status and review action",
            "headers": {
              "RateLimit": {
                "description": "Current quota, remaining requests, and reset time.",
                "schema": {
                  "type": "string"
                }
              },
              "RateLimit-Policy": {
                "description": "Quota policy and window applied to the credential.",
                "schema": {
                  "type": "string"
                }
              },
              "API-Version": {
                "description": "Compatibility version used for the response.",
                "schema": {
                  "type": "string",
                  "enum": [
                    "1"
                  ]
                }
              },
              "Deprecation": {
                "$ref": "#/components/headers/Deprecation"
              },
              "Sunset": {
                "$ref": "#/components/headers/Sunset"
              },
              "Link": {
                "$ref": "#/components/headers/DeprecationLink"
              },
              "Idempotency-Replayed": {
                "description": "True when a completed response was replayed for the supplied idempotency key.",
                "schema": {
                  "type": "boolean"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "401": {
            "description": "Authentication required",
            "headers": {
              "RateLimit": {
                "description": "Current quota, remaining requests, and reset time.",
                "schema": {
                  "type": "string"
                }
              },
              "RateLimit-Policy": {
                "description": "Quota policy and window applied to the credential.",
                "schema": {
                  "type": "string"
                }
              },
              "API-Version": {
                "description": "Compatibility version used for the response.",
                "schema": {
                  "type": "string",
                  "enum": [
                    "1"
                  ]
                }
              },
              "Deprecation": {
                "$ref": "#/components/headers/Deprecation"
              },
              "Sunset": {
                "$ref": "#/components/headers/Sunset"
              },
              "Link": {
                "$ref": "#/components/headers/DeprecationLink"
              },
              "Idempotency-Replayed": {
                "description": "True when a completed response was replayed for the supplied idempotency key.",
                "schema": {
                  "type": "boolean"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "403": {
            "description": "Insufficient scope, app binding, or administrator role",
            "headers": {
              "RateLimit": {
                "description": "Current quota, remaining requests, and reset time.",
                "schema": {
                  "type": "string"
                }
              },
              "RateLimit-Policy": {
                "description": "Quota policy and window applied to the credential.",
                "schema": {
                  "type": "string"
                }
              },
              "API-Version": {
                "description": "Compatibility version used for the response.",
                "schema": {
                  "type": "string",
                  "enum": [
                    "1"
                  ]
                }
              },
              "Deprecation": {
                "$ref": "#/components/headers/Deprecation"
              },
              "Sunset": {
                "$ref": "#/components/headers/Sunset"
              },
              "Link": {
                "$ref": "#/components/headers/DeprecationLink"
              },
              "Idempotency-Replayed": {
                "description": "True when a completed response was replayed for the supplied idempotency key.",
                "schema": {
                  "type": "boolean"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "App not found in the authenticated organization",
            "headers": {
              "RateLimit": {
                "description": "Current quota, remaining requests, and reset time.",
                "schema": {
                  "type": "string"
                }
              },
              "RateLimit-Policy": {
                "description": "Quota policy and window applied to the credential.",
                "schema": {
                  "type": "string"
                }
              },
              "API-Version": {
                "description": "Compatibility version used for the response.",
                "schema": {
                  "type": "string",
                  "enum": [
                    "1"
                  ]
                }
              },
              "Deprecation": {
                "$ref": "#/components/headers/Deprecation"
              },
              "Sunset": {
                "$ref": "#/components/headers/Sunset"
              },
              "Link": {
                "$ref": "#/components/headers/DeprecationLink"
              },
              "Idempotency-Replayed": {
                "description": "True when a completed response was replayed for the supplied idempotency key.",
                "schema": {
                  "type": "boolean"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "size"
                ],
                "properties": {
                  "size": {
                    "type": "integer",
                    "minimum": 1,
                    "maximum": 2147483648
                  }
                }
              }
            }
          }
        }
      }
    },
    "/api/apps/{appId}/google-play/edits/{editId}/listings": {
      "get": {
        "operationId": "googlePlayPublishingMetadataRead",
        "summary": "Read localized listings in an edit",
        "description": "Requires `releases:read`. Uses the stored service account for this AppSkyline app. Organization-admin session writes are also supported.",
        "tags": [
          "Google Play Publishing"
        ],
        "security": [
          {
            "apiKey": []
          },
          {
            "accessToken": []
          }
        ],
        "parameters": [
          {
            "in": "path",
            "name": "appId",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "path",
            "name": "editId",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "header",
            "name": "API-Version",
            "required": false,
            "description": "Compatibility version. Omit to use version 1; unsupported versions return 400.",
            "schema": {
              "type": "string",
              "enum": [
                "1"
              ],
              "default": "1"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Operation result; includes appId and packageName. Commit is not proof of publication.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": true
                }
              }
            },
            "headers": {
              "RateLimit": {
                "description": "Current quota, remaining requests, and reset time.",
                "schema": {
                  "type": "string"
                }
              },
              "RateLimit-Policy": {
                "description": "Quota policy and window applied to the credential.",
                "schema": {
                  "type": "string"
                }
              },
              "API-Version": {
                "description": "Compatibility version used for the response.",
                "schema": {
                  "type": "string",
                  "enum": [
                    "1"
                  ]
                }
              },
              "Deprecation": {
                "$ref": "#/components/headers/Deprecation"
              },
              "Sunset": {
                "$ref": "#/components/headers/Sunset"
              },
              "Link": {
                "$ref": "#/components/headers/DeprecationLink"
              }
            }
          },
          "400": {
            "description": "Invalid input or Google API error; details retain upstream status and review action",
            "headers": {
              "RateLimit": {
                "description": "Current quota, remaining requests, and reset time.",
                "schema": {
                  "type": "string"
                }
              },
              "RateLimit-Policy": {
                "description": "Quota policy and window applied to the credential.",
                "schema": {
                  "type": "string"
                }
              },
              "API-Version": {
                "description": "Compatibility version used for the response.",
                "schema": {
                  "type": "string",
                  "enum": [
                    "1"
                  ]
                }
              },
              "Deprecation": {
                "$ref": "#/components/headers/Deprecation"
              },
              "Sunset": {
                "$ref": "#/components/headers/Sunset"
              },
              "Link": {
                "$ref": "#/components/headers/DeprecationLink"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "401": {
            "description": "Authentication required",
            "headers": {
              "RateLimit": {
                "description": "Current quota, remaining requests, and reset time.",
                "schema": {
                  "type": "string"
                }
              },
              "RateLimit-Policy": {
                "description": "Quota policy and window applied to the credential.",
                "schema": {
                  "type": "string"
                }
              },
              "API-Version": {
                "description": "Compatibility version used for the response.",
                "schema": {
                  "type": "string",
                  "enum": [
                    "1"
                  ]
                }
              },
              "Deprecation": {
                "$ref": "#/components/headers/Deprecation"
              },
              "Sunset": {
                "$ref": "#/components/headers/Sunset"
              },
              "Link": {
                "$ref": "#/components/headers/DeprecationLink"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "403": {
            "description": "Insufficient scope, app binding, or administrator role",
            "headers": {
              "RateLimit": {
                "description": "Current quota, remaining requests, and reset time.",
                "schema": {
                  "type": "string"
                }
              },
              "RateLimit-Policy": {
                "description": "Quota policy and window applied to the credential.",
                "schema": {
                  "type": "string"
                }
              },
              "API-Version": {
                "description": "Compatibility version used for the response.",
                "schema": {
                  "type": "string",
                  "enum": [
                    "1"
                  ]
                }
              },
              "Deprecation": {
                "$ref": "#/components/headers/Deprecation"
              },
              "Sunset": {
                "$ref": "#/components/headers/Sunset"
              },
              "Link": {
                "$ref": "#/components/headers/DeprecationLink"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "App not found in the authenticated organization",
            "headers": {
              "RateLimit": {
                "description": "Current quota, remaining requests, and reset time.",
                "schema": {
                  "type": "string"
                }
              },
              "RateLimit-Policy": {
                "description": "Quota policy and window applied to the credential.",
                "schema": {
                  "type": "string"
                }
              },
              "API-Version": {
                "description": "Compatibility version used for the response.",
                "schema": {
                  "type": "string",
                  "enum": [
                    "1"
                  ]
                }
              },
              "Deprecation": {
                "$ref": "#/components/headers/Deprecation"
              },
              "Sunset": {
                "$ref": "#/components/headers/Sunset"
              },
              "Link": {
                "$ref": "#/components/headers/DeprecationLink"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      },
      "put": {
        "operationId": "googlePlayPublishingMetadata",
        "summary": "Stage localized listing text",
        "description": "Requires `releases:write`. Uses the stored service account for this AppSkyline app. Organization-admin session writes are also supported.",
        "tags": [
          "Google Play Publishing"
        ],
        "security": [
          {
            "apiKey": []
          },
          {
            "accessToken": []
          }
        ],
        "parameters": [
          {
            "in": "path",
            "name": "appId",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "path",
            "name": "editId",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "header",
            "name": "API-Version",
            "required": false,
            "description": "Compatibility version. Omit to use version 1; unsupported versions return 400.",
            "schema": {
              "type": "string",
              "enum": [
                "1"
              ],
              "default": "1"
            }
          },
          {
            "in": "header",
            "name": "Idempotency-Key",
            "required": false,
            "description": "Unique retry key retained for 24 hours (maximum 255 characters).",
            "schema": {
              "type": "string",
              "minLength": 1,
              "maxLength": 255
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Operation result; includes appId and packageName. Commit is not proof of publication.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": true
                }
              }
            },
            "headers": {
              "RateLimit": {
                "description": "Current quota, remaining requests, and reset time.",
                "schema": {
                  "type": "string"
                }
              },
              "RateLimit-Policy": {
                "description": "Quota policy and window applied to the credential.",
                "schema": {
                  "type": "string"
                }
              },
              "API-Version": {
                "description": "Compatibility version used for the response.",
                "schema": {
                  "type": "string",
                  "enum": [
                    "1"
                  ]
                }
              },
              "Deprecation": {
                "$ref": "#/components/headers/Deprecation"
              },
              "Sunset": {
                "$ref": "#/components/headers/Sunset"
              },
              "Link": {
                "$ref": "#/components/headers/DeprecationLink"
              },
              "Idempotency-Replayed": {
                "description": "True when a completed response was replayed for the supplied idempotency key.",
                "schema": {
                  "type": "boolean"
                }
              }
            }
          },
          "400": {
            "description": "Invalid input or Google API error; details retain upstream status and review action",
            "headers": {
              "RateLimit": {
                "description": "Current quota, remaining requests, and reset time.",
                "schema": {
                  "type": "string"
                }
              },
              "RateLimit-Policy": {
                "description": "Quota policy and window applied to the credential.",
                "schema": {
                  "type": "string"
                }
              },
              "API-Version": {
                "description": "Compatibility version used for the response.",
                "schema": {
                  "type": "string",
                  "enum": [
                    "1"
                  ]
                }
              },
              "Deprecation": {
                "$ref": "#/components/headers/Deprecation"
              },
              "Sunset": {
                "$ref": "#/components/headers/Sunset"
              },
              "Link": {
                "$ref": "#/components/headers/DeprecationLink"
              },
              "Idempotency-Replayed": {
                "description": "True when a completed response was replayed for the supplied idempotency key.",
                "schema": {
                  "type": "boolean"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "401": {
            "description": "Authentication required",
            "headers": {
              "RateLimit": {
                "description": "Current quota, remaining requests, and reset time.",
                "schema": {
                  "type": "string"
                }
              },
              "RateLimit-Policy": {
                "description": "Quota policy and window applied to the credential.",
                "schema": {
                  "type": "string"
                }
              },
              "API-Version": {
                "description": "Compatibility version used for the response.",
                "schema": {
                  "type": "string",
                  "enum": [
                    "1"
                  ]
                }
              },
              "Deprecation": {
                "$ref": "#/components/headers/Deprecation"
              },
              "Sunset": {
                "$ref": "#/components/headers/Sunset"
              },
              "Link": {
                "$ref": "#/components/headers/DeprecationLink"
              },
              "Idempotency-Replayed": {
                "description": "True when a completed response was replayed for the supplied idempotency key.",
                "schema": {
                  "type": "boolean"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "403": {
            "description": "Insufficient scope, app binding, or administrator role",
            "headers": {
              "RateLimit": {
                "description": "Current quota, remaining requests, and reset time.",
                "schema": {
                  "type": "string"
                }
              },
              "RateLimit-Policy": {
                "description": "Quota policy and window applied to the credential.",
                "schema": {
                  "type": "string"
                }
              },
              "API-Version": {
                "description": "Compatibility version used for the response.",
                "schema": {
                  "type": "string",
                  "enum": [
                    "1"
                  ]
                }
              },
              "Deprecation": {
                "$ref": "#/components/headers/Deprecation"
              },
              "Sunset": {
                "$ref": "#/components/headers/Sunset"
              },
              "Link": {
                "$ref": "#/components/headers/DeprecationLink"
              },
              "Idempotency-Replayed": {
                "description": "True when a completed response was replayed for the supplied idempotency key.",
                "schema": {
                  "type": "boolean"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "App not found in the authenticated organization",
            "headers": {
              "RateLimit": {
                "description": "Current quota, remaining requests, and reset time.",
                "schema": {
                  "type": "string"
                }
              },
              "RateLimit-Policy": {
                "description": "Quota policy and window applied to the credential.",
                "schema": {
                  "type": "string"
                }
              },
              "API-Version": {
                "description": "Compatibility version used for the response.",
                "schema": {
                  "type": "string",
                  "enum": [
                    "1"
                  ]
                }
              },
              "Deprecation": {
                "$ref": "#/components/headers/Deprecation"
              },
              "Sunset": {
                "$ref": "#/components/headers/Sunset"
              },
              "Link": {
                "$ref": "#/components/headers/DeprecationLink"
              },
              "Idempotency-Replayed": {
                "description": "True when a completed response was replayed for the supplied idempotency key.",
                "schema": {
                  "type": "boolean"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "locales"
                ],
                "properties": {
                  "locales": {
                    "type": "array",
                    "minItems": 1,
                    "maxItems": 100,
                    "items": {
                      "type": "object",
                      "required": [
                        "language",
                        "title",
                        "shortDescription",
                        "fullDescription"
                      ],
                      "properties": {
                        "language": {
                          "type": "string"
                        },
                        "title": {
                          "type": "string",
                          "minLength": 1,
                          "maxLength": 30
                        },
                        "shortDescription": {
                          "type": "string",
                          "minLength": 1,
                          "maxLength": 80
                        },
                        "fullDescription": {
                          "type": "string",
                          "minLength": 1,
                          "maxLength": 4000
                        },
                        "video": {
                          "type": "string"
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/api/apps/{appId}/google-play/edits/{editId}/tracks/{track}": {
      "put": {
        "operationId": "googlePlayPublishingTrack",
        "summary": "Replace all releases on this track within an edit",
        "description": "Requires `releases:write`. Uses the stored service account for this AppSkyline app. Organization-admin session writes are also supported.",
        "tags": [
          "Google Play Publishing"
        ],
        "security": [
          {
            "apiKey": []
          },
          {
            "accessToken": []
          }
        ],
        "parameters": [
          {
            "in": "path",
            "name": "appId",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "path",
            "name": "editId",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "path",
            "name": "track",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "header",
            "name": "API-Version",
            "required": false,
            "description": "Compatibility version. Omit to use version 1; unsupported versions return 400.",
            "schema": {
              "type": "string",
              "enum": [
                "1"
              ],
              "default": "1"
            }
          },
          {
            "in": "header",
            "name": "Idempotency-Key",
            "required": false,
            "description": "Unique retry key retained for 24 hours (maximum 255 characters).",
            "schema": {
              "type": "string",
              "minLength": 1,
              "maxLength": 255
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Operation result; includes appId and packageName. Commit is not proof of publication.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": true
                }
              }
            },
            "headers": {
              "RateLimit": {
                "description": "Current quota, remaining requests, and reset time.",
                "schema": {
                  "type": "string"
                }
              },
              "RateLimit-Policy": {
                "description": "Quota policy and window applied to the credential.",
                "schema": {
                  "type": "string"
                }
              },
              "API-Version": {
                "description": "Compatibility version used for the response.",
                "schema": {
                  "type": "string",
                  "enum": [
                    "1"
                  ]
                }
              },
              "Deprecation": {
                "$ref": "#/components/headers/Deprecation"
              },
              "Sunset": {
                "$ref": "#/components/headers/Sunset"
              },
              "Link": {
                "$ref": "#/components/headers/DeprecationLink"
              },
              "Idempotency-Replayed": {
                "description": "True when a completed response was replayed for the supplied idempotency key.",
                "schema": {
                  "type": "boolean"
                }
              }
            }
          },
          "400": {
            "description": "Invalid input or Google API error; details retain upstream status and review action",
            "headers": {
              "RateLimit": {
                "description": "Current quota, remaining requests, and reset time.",
                "schema": {
                  "type": "string"
                }
              },
              "RateLimit-Policy": {
                "description": "Quota policy and window applied to the credential.",
                "schema": {
                  "type": "string"
                }
              },
              "API-Version": {
                "description": "Compatibility version used for the response.",
                "schema": {
                  "type": "string",
                  "enum": [
                    "1"
                  ]
                }
              },
              "Deprecation": {
                "$ref": "#/components/headers/Deprecation"
              },
              "Sunset": {
                "$ref": "#/components/headers/Sunset"
              },
              "Link": {
                "$ref": "#/components/headers/DeprecationLink"
              },
              "Idempotency-Replayed": {
                "description": "True when a completed response was replayed for the supplied idempotency key.",
                "schema": {
                  "type": "boolean"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "401": {
            "description": "Authentication required",
            "headers": {
              "RateLimit": {
                "description": "Current quota, remaining requests, and reset time.",
                "schema": {
                  "type": "string"
                }
              },
              "RateLimit-Policy": {
                "description": "Quota policy and window applied to the credential.",
                "schema": {
                  "type": "string"
                }
              },
              "API-Version": {
                "description": "Compatibility version used for the response.",
                "schema": {
                  "type": "string",
                  "enum": [
                    "1"
                  ]
                }
              },
              "Deprecation": {
                "$ref": "#/components/headers/Deprecation"
              },
              "Sunset": {
                "$ref": "#/components/headers/Sunset"
              },
              "Link": {
                "$ref": "#/components/headers/DeprecationLink"
              },
              "Idempotency-Replayed": {
                "description": "True when a completed response was replayed for the supplied idempotency key.",
                "schema": {
                  "type": "boolean"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "403": {
            "description": "Insufficient scope, app binding, or administrator role",
            "headers": {
              "RateLimit": {
                "description": "Current quota, remaining requests, and reset time.",
                "schema": {
                  "type": "string"
                }
              },
              "RateLimit-Policy": {
                "description": "Quota policy and window applied to the credential.",
                "schema": {
                  "type": "string"
                }
              },
              "API-Version": {
                "description": "Compatibility version used for the response.",
                "schema": {
                  "type": "string",
                  "enum": [
                    "1"
                  ]
                }
              },
              "Deprecation": {
                "$ref": "#/components/headers/Deprecation"
              },
              "Sunset": {
                "$ref": "#/components/headers/Sunset"
              },
              "Link": {
                "$ref": "#/components/headers/DeprecationLink"
              },
              "Idempotency-Replayed": {
                "description": "True when a completed response was replayed for the supplied idempotency key.",
                "schema": {
                  "type": "boolean"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "App not found in the authenticated organization",
            "headers": {
              "RateLimit": {
                "description": "Current quota, remaining requests, and reset time.",
                "schema": {
                  "type": "string"
                }
              },
              "RateLimit-Policy": {
                "description": "Quota policy and window applied to the credential.",
                "schema": {
                  "type": "string"
                }
              },
              "API-Version": {
                "description": "Compatibility version used for the response.",
                "schema": {
                  "type": "string",
                  "enum": [
                    "1"
                  ]
                }
              },
              "Deprecation": {
                "$ref": "#/components/headers/Deprecation"
              },
              "Sunset": {
                "$ref": "#/components/headers/Sunset"
              },
              "Link": {
                "$ref": "#/components/headers/DeprecationLink"
              },
              "Idempotency-Replayed": {
                "description": "True when a completed response was replayed for the supplied idempotency key.",
                "schema": {
                  "type": "boolean"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "versionCodes"
                ],
                "properties": {
                  "versionCodes": {
                    "type": "array",
                    "minItems": 1,
                    "maxItems": 100,
                    "items": {
                      "type": "string",
                      "pattern": "^[1-9][0-9]*$"
                    }
                  },
                  "status": {
                    "type": "string",
                    "enum": [
                      "draft",
                      "completed",
                      "inProgress",
                      "halted"
                    ],
                    "default": "completed"
                  },
                  "userFraction": {
                    "type": "number",
                    "minimum": 0,
                    "maximum": 1,
                    "exclusiveMinimum": true,
                    "exclusiveMaximum": true
                  },
                  "name": {
                    "type": "string",
                    "maxLength": 200
                  },
                  "releaseNotes": {
                    "type": "array",
                    "items": {
                      "type": "object",
                      "required": [
                        "language",
                        "text"
                      ],
                      "properties": {
                        "language": {
                          "type": "string"
                        },
                        "text": {
                          "type": "string",
                          "maxLength": 500
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/api/apps/{appId}/google-play/edits/{editId}/commit": {
      "post": {
        "operationId": "googlePlayPublishingCommit",
        "summary": "Validate and commit; fail if changes are already in review",
        "description": "Requires `releases:write`. Uses the stored service account for this AppSkyline app. Organization-admin session writes are also supported. A commit is not publication. deferReview=true requires subsequent Play Console submission. No automatic retry or review cancellation.",
        "tags": [
          "Google Play Publishing"
        ],
        "security": [
          {
            "apiKey": []
          },
          {
            "accessToken": []
          }
        ],
        "parameters": [
          {
            "in": "path",
            "name": "appId",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "path",
            "name": "editId",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "header",
            "name": "API-Version",
            "required": false,
            "description": "Compatibility version. Omit to use version 1; unsupported versions return 400.",
            "schema": {
              "type": "string",
              "enum": [
                "1"
              ],
              "default": "1"
            }
          },
          {
            "in": "header",
            "name": "Idempotency-Key",
            "required": false,
            "description": "Unique retry key retained for 24 hours (maximum 255 characters).",
            "schema": {
              "type": "string",
              "minLength": 1,
              "maxLength": 255
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Operation result; includes appId and packageName. Commit is not proof of publication.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": true
                }
              }
            },
            "headers": {
              "RateLimit": {
                "description": "Current quota, remaining requests, and reset time.",
                "schema": {
                  "type": "string"
                }
              },
              "RateLimit-Policy": {
                "description": "Quota policy and window applied to the credential.",
                "schema": {
                  "type": "string"
                }
              },
              "API-Version": {
                "description": "Compatibility version used for the response.",
                "schema": {
                  "type": "string",
                  "enum": [
                    "1"
                  ]
                }
              },
              "Deprecation": {
                "$ref": "#/components/headers/Deprecation"
              },
              "Sunset": {
                "$ref": "#/components/headers/Sunset"
              },
              "Link": {
                "$ref": "#/components/headers/DeprecationLink"
              },
              "Idempotency-Replayed": {
                "description": "True when a completed response was replayed for the supplied idempotency key.",
                "schema": {
                  "type": "boolean"
                }
              }
            }
          },
          "400": {
            "description": "Invalid input or Google API error; details retain upstream status and review action",
            "headers": {
              "RateLimit": {
                "description": "Current quota, remaining requests, and reset time.",
                "schema": {
                  "type": "string"
                }
              },
              "RateLimit-Policy": {
                "description": "Quota policy and window applied to the credential.",
                "schema": {
                  "type": "string"
                }
              },
              "API-Version": {
                "description": "Compatibility version used for the response.",
                "schema": {
                  "type": "string",
                  "enum": [
                    "1"
                  ]
                }
              },
              "Deprecation": {
                "$ref": "#/components/headers/Deprecation"
              },
              "Sunset": {
                "$ref": "#/components/headers/Sunset"
              },
              "Link": {
                "$ref": "#/components/headers/DeprecationLink"
              },
              "Idempotency-Replayed": {
                "description": "True when a completed response was replayed for the supplied idempotency key.",
                "schema": {
                  "type": "boolean"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "401": {
            "description": "Authentication required",
            "headers": {
              "RateLimit": {
                "description": "Current quota, remaining requests, and reset time.",
                "schema": {
                  "type": "string"
                }
              },
              "RateLimit-Policy": {
                "description": "Quota policy and window applied to the credential.",
                "schema": {
                  "type": "string"
                }
              },
              "API-Version": {
                "description": "Compatibility version used for the response.",
                "schema": {
                  "type": "string",
                  "enum": [
                    "1"
                  ]
                }
              },
              "Deprecation": {
                "$ref": "#/components/headers/Deprecation"
              },
              "Sunset": {
                "$ref": "#/components/headers/Sunset"
              },
              "Link": {
                "$ref": "#/components/headers/DeprecationLink"
              },
              "Idempotency-Replayed": {
                "description": "True when a completed response was replayed for the supplied idempotency key.",
                "schema": {
                  "type": "boolean"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "403": {
            "description": "Insufficient scope, app binding, or administrator role",
            "headers": {
              "RateLimit": {
                "description": "Current quota, remaining requests, and reset time.",
                "schema": {
                  "type": "string"
                }
              },
              "RateLimit-Policy": {
                "description": "Quota policy and window applied to the credential.",
                "schema": {
                  "type": "string"
                }
              },
              "API-Version": {
                "description": "Compatibility version used for the response.",
                "schema": {
                  "type": "string",
                  "enum": [
                    "1"
                  ]
                }
              },
              "Deprecation": {
                "$ref": "#/components/headers/Deprecation"
              },
              "Sunset": {
                "$ref": "#/components/headers/Sunset"
              },
              "Link": {
                "$ref": "#/components/headers/DeprecationLink"
              },
              "Idempotency-Replayed": {
                "description": "True when a completed response was replayed for the supplied idempotency key.",
                "schema": {
                  "type": "boolean"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "App not found in the authenticated organization",
            "headers": {
              "RateLimit": {
                "description": "Current quota, remaining requests, and reset time.",
                "schema": {
                  "type": "string"
                }
              },
              "RateLimit-Policy": {
                "description": "Quota policy and window applied to the credential.",
                "schema": {
                  "type": "string"
                }
              },
              "API-Version": {
                "description": "Compatibility version used for the response.",
                "schema": {
                  "type": "string",
                  "enum": [
                    "1"
                  ]
                }
              },
              "Deprecation": {
                "$ref": "#/components/headers/Deprecation"
              },
              "Sunset": {
                "$ref": "#/components/headers/Sunset"
              },
              "Link": {
                "$ref": "#/components/headers/DeprecationLink"
              },
              "Idempotency-Replayed": {
                "description": "True when a completed response was replayed for the supplied idempotency key.",
                "schema": {
                  "type": "boolean"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        },
        "requestBody": {
          "required": false,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "deferReview": {
                    "type": "boolean",
                    "default": false
                  }
                }
              }
            }
          }
        }
      }
    },
    "/api/apps/{appId}/google-play/rollout/{track}": {
      "post": {
        "operationId": "googlePlayPublishingRollout",
        "summary": "Update or halt one existing rollout and commit, preserving other releases",
        "description": "Requires `releases:write`. Uses the stored service account for this AppSkyline app. Organization-admin session writes are also supported. Opens and commits a new edit. Coordinate per-app jobs to avoid invalidating other edits. Fraction cannot decrease; 1 completes rollout.",
        "tags": [
          "Google Play Publishing"
        ],
        "security": [
          {
            "apiKey": []
          },
          {
            "accessToken": []
          }
        ],
        "parameters": [
          {
            "in": "path",
            "name": "appId",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "path",
            "name": "track",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "header",
            "name": "API-Version",
            "required": false,
            "description": "Compatibility version. Omit to use version 1; unsupported versions return 400.",
            "schema": {
              "type": "string",
              "enum": [
                "1"
              ],
              "default": "1"
            }
          },
          {
            "in": "header",
            "name": "Idempotency-Key",
            "required": false,
            "description": "Unique retry key retained for 24 hours (maximum 255 characters).",
            "schema": {
              "type": "string",
              "minLength": 1,
              "maxLength": 255
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Operation result; includes appId and packageName. Commit is not proof of publication.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": true
                }
              }
            },
            "headers": {
              "RateLimit": {
                "description": "Current quota, remaining requests, and reset time.",
                "schema": {
                  "type": "string"
                }
              },
              "RateLimit-Policy": {
                "description": "Quota policy and window applied to the credential.",
                "schema": {
                  "type": "string"
                }
              },
              "API-Version": {
                "description": "Compatibility version used for the response.",
                "schema": {
                  "type": "string",
                  "enum": [
                    "1"
                  ]
                }
              },
              "Deprecation": {
                "$ref": "#/components/headers/Deprecation"
              },
              "Sunset": {
                "$ref": "#/components/headers/Sunset"
              },
              "Link": {
                "$ref": "#/components/headers/DeprecationLink"
              },
              "Idempotency-Replayed": {
                "description": "True when a completed response was replayed for the supplied idempotency key.",
                "schema": {
                  "type": "boolean"
                }
              }
            }
          },
          "400": {
            "description": "Invalid input or Google API error; details retain upstream status and review action",
            "headers": {
              "RateLimit": {
                "description": "Current quota, remaining requests, and reset time.",
                "schema": {
                  "type": "string"
                }
              },
              "RateLimit-Policy": {
                "description": "Quota policy and window applied to the credential.",
                "schema": {
                  "type": "string"
                }
              },
              "API-Version": {
                "description": "Compatibility version used for the response.",
                "schema": {
                  "type": "string",
                  "enum": [
                    "1"
                  ]
                }
              },
              "Deprecation": {
                "$ref": "#/components/headers/Deprecation"
              },
              "Sunset": {
                "$ref": "#/components/headers/Sunset"
              },
              "Link": {
                "$ref": "#/components/headers/DeprecationLink"
              },
              "Idempotency-Replayed": {
                "description": "True when a completed response was replayed for the supplied idempotency key.",
                "schema": {
                  "type": "boolean"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "401": {
            "description": "Authentication required",
            "headers": {
              "RateLimit": {
                "description": "Current quota, remaining requests, and reset time.",
                "schema": {
                  "type": "string"
                }
              },
              "RateLimit-Policy": {
                "description": "Quota policy and window applied to the credential.",
                "schema": {
                  "type": "string"
                }
              },
              "API-Version": {
                "description": "Compatibility version used for the response.",
                "schema": {
                  "type": "string",
                  "enum": [
                    "1"
                  ]
                }
              },
              "Deprecation": {
                "$ref": "#/components/headers/Deprecation"
              },
              "Sunset": {
                "$ref": "#/components/headers/Sunset"
              },
              "Link": {
                "$ref": "#/components/headers/DeprecationLink"
              },
              "Idempotency-Replayed": {
                "description": "True when a completed response was replayed for the supplied idempotency key.",
                "schema": {
                  "type": "boolean"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "403": {
            "description": "Insufficient scope, app binding, or administrator role",
            "headers": {
              "RateLimit": {
                "description": "Current quota, remaining requests, and reset time.",
                "schema": {
                  "type": "string"
                }
              },
              "RateLimit-Policy": {
                "description": "Quota policy and window applied to the credential.",
                "schema": {
                  "type": "string"
                }
              },
              "API-Version": {
                "description": "Compatibility version used for the response.",
                "schema": {
                  "type": "string",
                  "enum": [
                    "1"
                  ]
                }
              },
              "Deprecation": {
                "$ref": "#/components/headers/Deprecation"
              },
              "Sunset": {
                "$ref": "#/components/headers/Sunset"
              },
              "Link": {
                "$ref": "#/components/headers/DeprecationLink"
              },
              "Idempotency-Replayed": {
                "description": "True when a completed response was replayed for the supplied idempotency key.",
                "schema": {
                  "type": "boolean"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "App not found in the authenticated organization",
            "headers": {
              "RateLimit": {
                "description": "Current quota, remaining requests, and reset time.",
                "schema": {
                  "type": "string"
                }
              },
              "RateLimit-Policy": {
                "description": "Quota policy and window applied to the credential.",
                "schema": {
                  "type": "string"
                }
              },
              "API-Version": {
                "description": "Compatibility version used for the response.",
                "schema": {
                  "type": "string",
                  "enum": [
                    "1"
                  ]
                }
              },
              "Deprecation": {
                "$ref": "#/components/headers/Deprecation"
              },
              "Sunset": {
                "$ref": "#/components/headers/Sunset"
              },
              "Link": {
                "$ref": "#/components/headers/DeprecationLink"
              },
              "Idempotency-Replayed": {
                "description": "True when a completed response was replayed for the supplied idempotency key.",
                "schema": {
                  "type": "boolean"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "action",
                  "versionCode"
                ],
                "properties": {
                  "action": {
                    "type": "string",
                    "enum": [
                      "set",
                      "halt"
                    ]
                  },
                  "versionCode": {
                    "type": "string"
                  },
                  "fraction": {
                    "type": "number",
                    "minimum": 0,
                    "exclusiveMinimum": true,
                    "maximum": 1,
                    "description": "Required for set"
                  }
                }
              }
            }
          }
        }
      }
    },
    "/api/apps/{appId}/google-play/data-safety": {
      "post": {
        "operationId": "googlePlayPublishingDataSafety",
        "summary": "Upload Data safety CSV outside the edit workflow",
        "description": "Requires `releases:write`. Uses the stored service account for this AppSkyline app. Organization-admin session writes are also supported.",
        "tags": [
          "Google Play Publishing"
        ],
        "security": [
          {
            "apiKey": []
          },
          {
            "accessToken": []
          }
        ],
        "parameters": [
          {
            "in": "path",
            "name": "appId",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "header",
            "name": "API-Version",
            "required": false,
            "description": "Compatibility version. Omit to use version 1; unsupported versions return 400.",
            "schema": {
              "type": "string",
              "enum": [
                "1"
              ],
              "default": "1"
            }
          },
          {
            "in": "header",
            "name": "Idempotency-Key",
            "required": false,
            "description": "Unique retry key retained for 24 hours (maximum 255 characters).",
            "schema": {
              "type": "string",
              "minLength": 1,
              "maxLength": 255
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Operation result; includes appId and packageName. Commit is not proof of publication.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": true
                }
              }
            },
            "headers": {
              "RateLimit": {
                "description": "Current quota, remaining requests, and reset time.",
                "schema": {
                  "type": "string"
                }
              },
              "RateLimit-Policy": {
                "description": "Quota policy and window applied to the credential.",
                "schema": {
                  "type": "string"
                }
              },
              "API-Version": {
                "description": "Compatibility version used for the response.",
                "schema": {
                  "type": "string",
                  "enum": [
                    "1"
                  ]
                }
              },
              "Deprecation": {
                "$ref": "#/components/headers/Deprecation"
              },
              "Sunset": {
                "$ref": "#/components/headers/Sunset"
              },
              "Link": {
                "$ref": "#/components/headers/DeprecationLink"
              },
              "Idempotency-Replayed": {
                "description": "True when a completed response was replayed for the supplied idempotency key.",
                "schema": {
                  "type": "boolean"
                }
              }
            }
          },
          "400": {
            "description": "Invalid input or Google API error; details retain upstream status and review action",
            "headers": {
              "RateLimit": {
                "description": "Current quota, remaining requests, and reset time.",
                "schema": {
                  "type": "string"
                }
              },
              "RateLimit-Policy": {
                "description": "Quota policy and window applied to the credential.",
                "schema": {
                  "type": "string"
                }
              },
              "API-Version": {
                "description": "Compatibility version used for the response.",
                "schema": {
                  "type": "string",
                  "enum": [
                    "1"
                  ]
                }
              },
              "Deprecation": {
                "$ref": "#/components/headers/Deprecation"
              },
              "Sunset": {
                "$ref": "#/components/headers/Sunset"
              },
              "Link": {
                "$ref": "#/components/headers/DeprecationLink"
              },
              "Idempotency-Replayed": {
                "description": "True when a completed response was replayed for the supplied idempotency key.",
                "schema": {
                  "type": "boolean"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "401": {
            "description": "Authentication required",
            "headers": {
              "RateLimit": {
                "description": "Current quota, remaining requests, and reset time.",
                "schema": {
                  "type": "string"
                }
              },
              "RateLimit-Policy": {
                "description": "Quota policy and window applied to the credential.",
                "schema": {
                  "type": "string"
                }
              },
              "API-Version": {
                "description": "Compatibility version used for the response.",
                "schema": {
                  "type": "string",
                  "enum": [
                    "1"
                  ]
                }
              },
              "Deprecation": {
                "$ref": "#/components/headers/Deprecation"
              },
              "Sunset": {
                "$ref": "#/components/headers/Sunset"
              },
              "Link": {
                "$ref": "#/components/headers/DeprecationLink"
              },
              "Idempotency-Replayed": {
                "description": "True when a completed response was replayed for the supplied idempotency key.",
                "schema": {
                  "type": "boolean"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "403": {
            "description": "Insufficient scope, app binding, or administrator role",
            "headers": {
              "RateLimit": {
                "description": "Current quota, remaining requests, and reset time.",
                "schema": {
                  "type": "string"
                }
              },
              "RateLimit-Policy": {
                "description": "Quota policy and window applied to the credential.",
                "schema": {
                  "type": "string"
                }
              },
              "API-Version": {
                "description": "Compatibility version used for the response.",
                "schema": {
                  "type": "string",
                  "enum": [
                    "1"
                  ]
                }
              },
              "Deprecation": {
                "$ref": "#/components/headers/Deprecation"
              },
              "Sunset": {
                "$ref": "#/components/headers/Sunset"
              },
              "Link": {
                "$ref": "#/components/headers/DeprecationLink"
              },
              "Idempotency-Replayed": {
                "description": "True when a completed response was replayed for the supplied idempotency key.",
                "schema": {
                  "type": "boolean"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "App not found in the authenticated organization",
            "headers": {
              "RateLimit": {
                "description": "Current quota, remaining requests, and reset time.",
                "schema": {
                  "type": "string"
                }
              },
              "RateLimit-Policy": {
                "description": "Quota policy and window applied to the credential.",
                "schema": {
                  "type": "string"
                }
              },
              "API-Version": {
                "description": "Compatibility version used for the response.",
                "schema": {
                  "type": "string",
                  "enum": [
                    "1"
                  ]
                }
              },
              "Deprecation": {
                "$ref": "#/components/headers/Deprecation"
              },
              "Sunset": {
                "$ref": "#/components/headers/Sunset"
              },
              "Link": {
                "$ref": "#/components/headers/DeprecationLink"
              },
              "Idempotency-Replayed": {
                "description": "True when a completed response was replayed for the supplied idempotency key.",
                "schema": {
                  "type": "boolean"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "safetyLabels"
                ],
                "properties": {
                  "safetyLabels": {
                    "type": "string",
                    "description": "Google Data safety CSV, maximum 1 MiB"
                  }
                }
              }
            }
          }
        }
      }
    },
    "/api/keywords": {
      "get": {
        "tags": [
          "Keywords"
        ],
        "summary": "List keywords",
        "description": "Lists the tracked keywords of your organization, optionally filtered by `appId`. Requires the `keywords:read` scope. For stable traversal, set `pagination=cursor`; the response becomes `{items, nextCursor}` and is ordered by `_id`. Pass `nextCursor` back as `cursor` until it is null. The default array response and offset pagination remain unchanged when cursor pagination is not requested.\n",
        "security": [
          {
            "apiKey": []
          },
          {
            "accessToken": []
          }
        ],
        "parameters": [
          {
            "in": "query",
            "name": "appId",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "pagination",
            "description": "Set to `cursor` for a stable page envelope",
            "schema": {
              "type": "string",
              "enum": [
                "cursor"
              ]
            }
          },
          {
            "in": "query",
            "name": "cursor",
            "description": "Opaque `nextCursor` from the preceding cursor page",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "limit",
            "description": "Page size. Cursor mode defaults to 100 rows and caps at 500; the default array mode keeps 0 as unbounded.",
            "schema": {
              "type": "integer",
              "default": 0
            }
          },
          {
            "in": "query",
            "name": "skip",
            "schema": {
              "type": "integer",
              "default": 0
            }
          },
          {
            "in": "query",
            "name": "sortField",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "sortDirection",
            "schema": {
              "type": "string",
              "enum": [
                "ASC",
                "DESC"
              ]
            }
          },
          {
            "in": "query",
            "name": "fields",
            "description": "Comma-separated projection of fields to return",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "header",
            "name": "API-Version",
            "required": false,
            "description": "Compatibility version. Omit to use version 1; unsupported versions return 400.",
            "schema": {
              "type": "string",
              "enum": [
                "1"
              ],
              "default": "1"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Array of keywords, or `{items, nextCursor}` in cursor mode",
            "headers": {
              "RateLimit": {
                "description": "Current quota, remaining requests, and reset time.",
                "schema": {
                  "type": "string"
                }
              },
              "RateLimit-Policy": {
                "description": "Quota policy and window applied to the credential.",
                "schema": {
                  "type": "string"
                }
              },
              "API-Version": {
                "description": "Compatibility version used for the response.",
                "schema": {
                  "type": "string",
                  "enum": [
                    "1"
                  ]
                }
              },
              "Deprecation": {
                "$ref": "#/components/headers/Deprecation"
              },
              "Sunset": {
                "$ref": "#/components/headers/Sunset"
              },
              "Link": {
                "$ref": "#/components/headers/DeprecationLink"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "oneOf": [
                    {
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/Keyword"
                      }
                    },
                    {
                      "$ref": "#/components/schemas/KeywordPage"
                    }
                  ]
                }
              }
            }
          },
          "400": {
            "description": "Malformed cursor, or a sort incompatible with cursor pagination",
            "headers": {
              "RateLimit": {
                "description": "Current quota, remaining requests, and reset time.",
                "schema": {
                  "type": "string"
                }
              },
              "RateLimit-Policy": {
                "description": "Quota policy and window applied to the credential.",
                "schema": {
                  "type": "string"
                }
              },
              "API-Version": {
                "description": "Compatibility version used for the response.",
                "schema": {
                  "type": "string",
                  "enum": [
                    "1"
                  ]
                }
              },
              "Deprecation": {
                "$ref": "#/components/headers/Deprecation"
              },
              "Sunset": {
                "$ref": "#/components/headers/Sunset"
              },
              "Link": {
                "$ref": "#/components/headers/DeprecationLink"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid credentials",
            "headers": {
              "RateLimit": {
                "description": "Current quota, remaining requests, and reset time.",
                "schema": {
                  "type": "string"
                }
              },
              "RateLimit-Policy": {
                "description": "Quota policy and window applied to the credential.",
                "schema": {
                  "type": "string"
                }
              },
              "API-Version": {
                "description": "Compatibility version used for the response.",
                "schema": {
                  "type": "string",
                  "enum": [
                    "1"
                  ]
                }
              },
              "Deprecation": {
                "$ref": "#/components/headers/Deprecation"
              },
              "Sunset": {
                "$ref": "#/components/headers/Sunset"
              },
              "Link": {
                "$ref": "#/components/headers/DeprecationLink"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "403": {
            "description": "API key is missing the `keywords:read` scope",
            "headers": {
              "RateLimit": {
                "description": "Current quota, remaining requests, and reset time.",
                "schema": {
                  "type": "string"
                }
              },
              "RateLimit-Policy": {
                "description": "Quota policy and window applied to the credential.",
                "schema": {
                  "type": "string"
                }
              },
              "API-Version": {
                "description": "Compatibility version used for the response.",
                "schema": {
                  "type": "string",
                  "enum": [
                    "1"
                  ]
                }
              },
              "Deprecation": {
                "$ref": "#/components/headers/Deprecation"
              },
              "Sunset": {
                "$ref": "#/components/headers/Sunset"
              },
              "Link": {
                "$ref": "#/components/headers/DeprecationLink"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "429": {
            "description": "API key rate limit exceeded",
            "headers": {
              "RateLimit": {
                "description": "Current quota, remaining requests, and reset time.",
                "schema": {
                  "type": "string"
                }
              },
              "RateLimit-Policy": {
                "description": "Quota policy and window applied to the credential.",
                "schema": {
                  "type": "string"
                }
              },
              "API-Version": {
                "description": "Compatibility version used for the response.",
                "schema": {
                  "type": "string",
                  "enum": [
                    "1"
                  ]
                }
              },
              "Deprecation": {
                "$ref": "#/components/headers/Deprecation"
              },
              "Sunset": {
                "$ref": "#/components/headers/Sunset"
              },
              "Link": {
                "$ref": "#/components/headers/DeprecationLink"
              },
              "Retry-After": {
                "description": "Seconds until the request may be retried.",
                "schema": {
                  "type": "integer"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        },
        "operationId": "getKeywords"
      },
      "post": {
        "tags": [
          "Keywords"
        ],
        "summary": "Create a keyword",
        "description": "Requires the `keywords:write` scope.",
        "security": [
          {
            "apiKey": []
          },
          {
            "accessToken": []
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "The created keyword",
            "headers": {
              "RateLimit": {
                "description": "Current quota, remaining requests, and reset time.",
                "schema": {
                  "type": "string"
                }
              },
              "RateLimit-Policy": {
                "description": "Quota policy and window applied to the credential.",
                "schema": {
                  "type": "string"
                }
              },
              "API-Version": {
                "description": "Compatibility version used for the response.",
                "schema": {
                  "type": "string",
                  "enum": [
                    "1"
                  ]
                }
              },
              "Deprecation": {
                "$ref": "#/components/headers/Deprecation"
              },
              "Sunset": {
                "$ref": "#/components/headers/Sunset"
              },
              "Link": {
                "$ref": "#/components/headers/DeprecationLink"
              },
              "Idempotency-Replayed": {
                "description": "True when a completed response was replayed for the supplied idempotency key.",
                "schema": {
                  "type": "boolean"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Keyword"
                }
              }
            }
          },
          "403": {
            "description": "API key is missing the `keywords:write` scope",
            "headers": {
              "RateLimit": {
                "description": "Current quota, remaining requests, and reset time.",
                "schema": {
                  "type": "string"
                }
              },
              "RateLimit-Policy": {
                "description": "Quota policy and window applied to the credential.",
                "schema": {
                  "type": "string"
                }
              },
              "API-Version": {
                "description": "Compatibility version used for the response.",
                "schema": {
                  "type": "string",
                  "enum": [
                    "1"
                  ]
                }
              },
              "Deprecation": {
                "$ref": "#/components/headers/Deprecation"
              },
              "Sunset": {
                "$ref": "#/components/headers/Sunset"
              },
              "Link": {
                "$ref": "#/components/headers/DeprecationLink"
              },
              "Idempotency-Replayed": {
                "description": "True when a completed response was replayed for the supplied idempotency key.",
                "schema": {
                  "type": "boolean"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        },
        "operationId": "postKeywords",
        "parameters": [
          {
            "in": "header",
            "name": "API-Version",
            "required": false,
            "description": "Compatibility version. Omit to use version 1; unsupported versions return 400.",
            "schema": {
              "type": "string",
              "enum": [
                "1"
              ],
              "default": "1"
            }
          },
          {
            "in": "header",
            "name": "Idempotency-Key",
            "required": false,
            "description": "Unique retry key retained for 24 hours (maximum 255 characters).",
            "schema": {
              "type": "string",
              "minLength": 1,
              "maxLength": 255
            }
          }
        ]
      }
    },
    "/api/keywords/{keywordId}": {
      "get": {
        "tags": [
          "Keywords"
        ],
        "summary": "Get a keyword by id",
        "description": "Requires the `keywords:read` scope.",
        "security": [
          {
            "apiKey": []
          },
          {
            "accessToken": []
          }
        ],
        "parameters": [
          {
            "in": "path",
            "name": "keywordId",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "header",
            "name": "API-Version",
            "required": false,
            "description": "Compatibility version. Omit to use version 1; unsupported versions return 400.",
            "schema": {
              "type": "string",
              "enum": [
                "1"
              ],
              "default": "1"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The keyword",
            "headers": {
              "RateLimit": {
                "description": "Current quota, remaining requests, and reset time.",
                "schema": {
                  "type": "string"
                }
              },
              "RateLimit-Policy": {
                "description": "Quota policy and window applied to the credential.",
                "schema": {
                  "type": "string"
                }
              },
              "API-Version": {
                "description": "Compatibility version used for the response.",
                "schema": {
                  "type": "string",
                  "enum": [
                    "1"
                  ]
                }
              },
              "Deprecation": {
                "$ref": "#/components/headers/Deprecation"
              },
              "Sunset": {
                "$ref": "#/components/headers/Sunset"
              },
              "Link": {
                "$ref": "#/components/headers/DeprecationLink"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Keyword"
                }
              }
            }
          },
          "403": {
            "description": "API key is missing the `keywords:read` scope",
            "headers": {
              "RateLimit": {
                "description": "Current quota, remaining requests, and reset time.",
                "schema": {
                  "type": "string"
                }
              },
              "RateLimit-Policy": {
                "description": "Quota policy and window applied to the credential.",
                "schema": {
                  "type": "string"
                }
              },
              "API-Version": {
                "description": "Compatibility version used for the response.",
                "schema": {
                  "type": "string",
                  "enum": [
                    "1"
                  ]
                }
              },
              "Deprecation": {
                "$ref": "#/components/headers/Deprecation"
              },
              "Sunset": {
                "$ref": "#/components/headers/Sunset"
              },
              "Link": {
                "$ref": "#/components/headers/DeprecationLink"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "No such keyword in your organization",
            "headers": {
              "RateLimit": {
                "description": "Current quota, remaining requests, and reset time.",
                "schema": {
                  "type": "string"
                }
              },
              "RateLimit-Policy": {
                "description": "Quota policy and window applied to the credential.",
                "schema": {
                  "type": "string"
                }
              },
              "API-Version": {
                "description": "Compatibility version used for the response.",
                "schema": {
                  "type": "string",
                  "enum": [
                    "1"
                  ]
                }
              },
              "Deprecation": {
                "$ref": "#/components/headers/Deprecation"
              },
              "Sunset": {
                "$ref": "#/components/headers/Sunset"
              },
              "Link": {
                "$ref": "#/components/headers/DeprecationLink"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        },
        "operationId": "getKeywordsByKeywordId"
      },
      "put": {
        "tags": [
          "Keywords"
        ],
        "summary": "Update a keyword",
        "description": "Requires the `keywords:write` scope.",
        "security": [
          {
            "apiKey": []
          },
          {
            "accessToken": []
          }
        ],
        "parameters": [
          {
            "in": "path",
            "name": "keywordId",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "header",
            "name": "API-Version",
            "required": false,
            "description": "Compatibility version. Omit to use version 1; unsupported versions return 400.",
            "schema": {
              "type": "string",
              "enum": [
                "1"
              ],
              "default": "1"
            }
          },
          {
            "in": "header",
            "name": "Idempotency-Key",
            "required": false,
            "description": "Unique retry key retained for 24 hours (maximum 255 characters).",
            "schema": {
              "type": "string",
              "minLength": 1,
              "maxLength": 255
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "The updated keyword",
            "headers": {
              "RateLimit": {
                "description": "Current quota, remaining requests, and reset time.",
                "schema": {
                  "type": "string"
                }
              },
              "RateLimit-Policy": {
                "description": "Quota policy and window applied to the credential.",
                "schema": {
                  "type": "string"
                }
              },
              "API-Version": {
                "description": "Compatibility version used for the response.",
                "schema": {
                  "type": "string",
                  "enum": [
                    "1"
                  ]
                }
              },
              "Deprecation": {
                "$ref": "#/components/headers/Deprecation"
              },
              "Sunset": {
                "$ref": "#/components/headers/Sunset"
              },
              "Link": {
                "$ref": "#/components/headers/DeprecationLink"
              },
              "Idempotency-Replayed": {
                "description": "True when a completed response was replayed for the supplied idempotency key.",
                "schema": {
                  "type": "boolean"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Keyword"
                }
              }
            }
          },
          "404": {
            "description": "No such keyword in your organization",
            "headers": {
              "RateLimit": {
                "description": "Current quota, remaining requests, and reset time.",
                "schema": {
                  "type": "string"
                }
              },
              "RateLimit-Policy": {
                "description": "Quota policy and window applied to the credential.",
                "schema": {
                  "type": "string"
                }
              },
              "API-Version": {
                "description": "Compatibility version used for the response.",
                "schema": {
                  "type": "string",
                  "enum": [
                    "1"
                  ]
                }
              },
              "Deprecation": {
                "$ref": "#/components/headers/Deprecation"
              },
              "Sunset": {
                "$ref": "#/components/headers/Sunset"
              },
              "Link": {
                "$ref": "#/components/headers/DeprecationLink"
              },
              "Idempotency-Replayed": {
                "description": "True when a completed response was replayed for the supplied idempotency key.",
                "schema": {
                  "type": "boolean"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        },
        "operationId": "putKeywordsByKeywordId"
      },
      "delete": {
        "tags": [
          "Keywords"
        ],
        "summary": "Delete a keyword",
        "description": "Requires the `keywords:write` scope.",
        "security": [
          {
            "apiKey": []
          },
          {
            "accessToken": []
          }
        ],
        "parameters": [
          {
            "in": "path",
            "name": "keywordId",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "header",
            "name": "API-Version",
            "required": false,
            "description": "Compatibility version. Omit to use version 1; unsupported versions return 400.",
            "schema": {
              "type": "string",
              "enum": [
                "1"
              ],
              "default": "1"
            }
          },
          {
            "in": "header",
            "name": "Idempotency-Key",
            "required": false,
            "description": "Unique retry key retained for 24 hours (maximum 255 characters).",
            "schema": {
              "type": "string",
              "minLength": 1,
              "maxLength": 255
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Deleted",
            "headers": {
              "RateLimit": {
                "description": "Current quota, remaining requests, and reset time.",
                "schema": {
                  "type": "string"
                }
              },
              "RateLimit-Policy": {
                "description": "Quota policy and window applied to the credential.",
                "schema": {
                  "type": "string"
                }
              },
              "API-Version": {
                "description": "Compatibility version used for the response.",
                "schema": {
                  "type": "string",
                  "enum": [
                    "1"
                  ]
                }
              },
              "Deprecation": {
                "$ref": "#/components/headers/Deprecation"
              },
              "Sunset": {
                "$ref": "#/components/headers/Sunset"
              },
              "Link": {
                "$ref": "#/components/headers/DeprecationLink"
              },
              "Idempotency-Replayed": {
                "description": "True when a completed response was replayed for the supplied idempotency key.",
                "schema": {
                  "type": "boolean"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Keyword"
                }
              }
            }
          },
          "404": {
            "description": "No such keyword in your organization",
            "headers": {
              "RateLimit": {
                "description": "Current quota, remaining requests, and reset time.",
                "schema": {
                  "type": "string"
                }
              },
              "RateLimit-Policy": {
                "description": "Quota policy and window applied to the credential.",
                "schema": {
                  "type": "string"
                }
              },
              "API-Version": {
                "description": "Compatibility version used for the response.",
                "schema": {
                  "type": "string",
                  "enum": [
                    "1"
                  ]
                }
              },
              "Deprecation": {
                "$ref": "#/components/headers/Deprecation"
              },
              "Sunset": {
                "$ref": "#/components/headers/Sunset"
              },
              "Link": {
                "$ref": "#/components/headers/DeprecationLink"
              },
              "Idempotency-Replayed": {
                "description": "True when a completed response was replayed for the supplied idempotency key.",
                "schema": {
                  "type": "boolean"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        },
        "operationId": "deleteKeywordsByKeywordId"
      }
    },
    "/api/metadatasuggestions": {
      "get": {
        "operationId": "getMetadataSuggestions",
        "summary": "Suggest store metadata from tracked keywords",
        "description": "Audits each store listing against the app's tracked keywords in one market and drafts the indexed fields — the Apple app name, subtitle and 100-character keyword field, the Google Play title (its short description gets the phrases to work in rather than a rewrite), and Microsoft Store search terms. The listing is the synced metadata when the store account is connected, otherwise the live public listing in that market's storefront. Each keyword carries where the listing covers it, its latest stored rank, cached Google web-search demand (a demand proxy, not store popularity) and a priority. Without appId every app of the authenticated organization is analyzed in its main market; listings not reached within the time budget return status deferred. Pass title, subtitle, keywords, shortDescription or description with one appId and store to check proposed text instead. demand=refresh may spend DataForSEO credits on uncached terms; the default only reads the cache. Requires metadata:read, keywords:read and rankings:read for scoped API keys; app-bound keys see only their app. Nothing is written to the stores.",
        "tags": [
          "Metadata"
        ],
        "security": [
          {
            "apiKey": []
          },
          {
            "accessToken": []
          }
        ],
        "parameters": [
          {
            "in": "query",
            "name": "appId",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "store",
            "schema": {
              "type": "string",
              "enum": [
                "ios-app-store",
                "macos-app-store",
                "google-play",
                "microsoft-store"
              ]
            }
          },
          {
            "in": "query",
            "name": "country",
            "description": "Two-letter market; defaults to the country with most tracked keywords",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "language",
            "description": "Listing language; defaults to the market's tracked-keyword language",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "demand",
            "schema": {
              "type": "string",
              "enum": [
                "cached",
                "refresh"
              ],
              "default": "cached"
            }
          },
          {
            "in": "query",
            "name": "title",
            "description": "Proposed title to check",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "subtitle",
            "description": "Proposed Apple subtitle to check",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "keywords",
            "description": "Proposed Apple keyword field or Microsoft search terms to check",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "shortDescription",
            "description": "Proposed Google Play short description to check",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "description",
            "description": "Proposed full description to check",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "header",
            "name": "API-Version",
            "required": false,
            "description": "Compatibility version. Omit to use version 1; unsupported versions return 400.",
            "schema": {
              "type": "string",
              "enum": [
                "1"
              ],
              "default": "1"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Versioned result with scope, demand, totalApps, truncated, complete and results. Each result has appId, appName, store, storeId, status (ok, no-tracked-keywords, store-not-configured, listing-unavailable or deferred), market and otherMarkets; analyzed results add source, fields, coverage, keywords, issues, suggestions, competitorWords and, when text was proposed, proposal. competitorWords come from competitor titles and are unvetted candidates.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": true
                }
              }
            },
            "headers": {
              "RateLimit": {
                "description": "Current quota, remaining requests, and reset time.",
                "schema": {
                  "type": "string"
                }
              },
              "RateLimit-Policy": {
                "description": "Quota policy and window applied to the credential.",
                "schema": {
                  "type": "string"
                }
              },
              "API-Version": {
                "description": "Compatibility version used for the response.",
                "schema": {
                  "type": "string",
                  "enum": [
                    "1"
                  ]
                }
              },
              "Deprecation": {
                "$ref": "#/components/headers/Deprecation"
              },
              "Sunset": {
                "$ref": "#/components/headers/Sunset"
              },
              "Link": {
                "$ref": "#/components/headers/DeprecationLink"
              }
            }
          },
          "400": {
            "description": "Invalid selector or proposal",
            "headers": {
              "RateLimit": {
                "description": "Current quota, remaining requests, and reset time.",
                "schema": {
                  "type": "string"
                }
              },
              "RateLimit-Policy": {
                "description": "Quota policy and window applied to the credential.",
                "schema": {
                  "type": "string"
                }
              },
              "API-Version": {
                "description": "Compatibility version used for the response.",
                "schema": {
                  "type": "string",
                  "enum": [
                    "1"
                  ]
                }
              },
              "Deprecation": {
                "$ref": "#/components/headers/Deprecation"
              },
              "Sunset": {
                "$ref": "#/components/headers/Sunset"
              },
              "Link": {
                "$ref": "#/components/headers/DeprecationLink"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "401": {
            "description": "Authentication required",
            "headers": {
              "RateLimit": {
                "description": "Current quota, remaining requests, and reset time.",
                "schema": {
                  "type": "string"
                }
              },
              "RateLimit-Policy": {
                "description": "Quota policy and window applied to the credential.",
                "schema": {
                  "type": "string"
                }
              },
              "API-Version": {
                "description": "Compatibility version used for the response.",
                "schema": {
                  "type": "string",
                  "enum": [
                    "1"
                  ]
                }
              },
              "Deprecation": {
                "$ref": "#/components/headers/Deprecation"
              },
              "Sunset": {
                "$ref": "#/components/headers/Sunset"
              },
              "Link": {
                "$ref": "#/components/headers/DeprecationLink"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "403": {
            "description": "Insufficient scope or app binding",
            "headers": {
              "RateLimit": {
                "description": "Current quota, remaining requests, and reset time.",
                "schema": {
                  "type": "string"
                }
              },
              "RateLimit-Policy": {
                "description": "Quota policy and window applied to the credential.",
                "schema": {
                  "type": "string"
                }
              },
              "API-Version": {
                "description": "Compatibility version used for the response.",
                "schema": {
                  "type": "string",
                  "enum": [
                    "1"
                  ]
                }
              },
              "Deprecation": {
                "$ref": "#/components/headers/Deprecation"
              },
              "Sunset": {
                "$ref": "#/components/headers/Sunset"
              },
              "Link": {
                "$ref": "#/components/headers/DeprecationLink"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "No such app in the authenticated organization",
            "headers": {
              "RateLimit": {
                "description": "Current quota, remaining requests, and reset time.",
                "schema": {
                  "type": "string"
                }
              },
              "RateLimit-Policy": {
                "description": "Quota policy and window applied to the credential.",
                "schema": {
                  "type": "string"
                }
              },
              "API-Version": {
                "description": "Compatibility version used for the response.",
                "schema": {
                  "type": "string",
                  "enum": [
                    "1"
                  ]
                }
              },
              "Deprecation": {
                "$ref": "#/components/headers/Deprecation"
              },
              "Sunset": {
                "$ref": "#/components/headers/Sunset"
              },
              "Link": {
                "$ref": "#/components/headers/DeprecationLink"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/api/reviewstatuses": {
      "get": {
        "operationId": "getReviewStatuses",
        "summary": "Read current app-version review status across stores",
        "description": "Requires releases:read for scoped API keys. Organization is selected by authentication; app-bound keys see only their app. Product matches AppSkyline app names exactly, ignoring case. Pages contain at most five apps; follow nextCursor as after. Missing store IDs are not-configured; credential or upstream failures remain per-store errors. No submissions or edits are created.",
        "tags": [
          "Review Status"
        ],
        "security": [
          {
            "apiKey": []
          },
          {
            "accessToken": []
          }
        ],
        "parameters": [
          {
            "in": "query",
            "name": "appId",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "product",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "store",
            "schema": {
              "type": "string",
              "enum": [
                "ios-app-store",
                "macos-app-store",
                "google-play",
                "microsoft-store"
              ]
            }
          },
          {
            "in": "query",
            "name": "track",
            "schema": {
              "type": "string",
              "default": "production"
            }
          },
          {
            "in": "query",
            "name": "after",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "header",
            "name": "API-Version",
            "required": false,
            "description": "Compatibility version. Omit to use version 1; unsupported versions return 400.",
            "schema": {
              "type": "string",
              "enum": [
                "1"
              ],
              "default": "1"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Versioned snapshot with organizationId, scope, totalApps, checkedAt, complete, nextCursor and results. Each result has appId, product, store, storeAppId, availability, status, actionRequired and submissions; successful reads also include source, observedAt, fingerprint, consoleUrl and rejectionDetails. Unknown states never imply approval. actionRequired means a rejected or failed submission, not a connection failure.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": true
                }
              }
            },
            "headers": {
              "RateLimit": {
                "description": "Current quota, remaining requests, and reset time.",
                "schema": {
                  "type": "string"
                }
              },
              "RateLimit-Policy": {
                "description": "Quota policy and window applied to the credential.",
                "schema": {
                  "type": "string"
                }
              },
              "API-Version": {
                "description": "Compatibility version used for the response.",
                "schema": {
                  "type": "string",
                  "enum": [
                    "1"
                  ]
                }
              },
              "Deprecation": {
                "$ref": "#/components/headers/Deprecation"
              },
              "Sunset": {
                "$ref": "#/components/headers/Sunset"
              },
              "Link": {
                "$ref": "#/components/headers/DeprecationLink"
              }
            }
          },
          "400": {
            "description": "Invalid selector",
            "headers": {
              "RateLimit": {
                "description": "Current quota, remaining requests, and reset time.",
                "schema": {
                  "type": "string"
                }
              },
              "RateLimit-Policy": {
                "description": "Quota policy and window applied to the credential.",
                "schema": {
                  "type": "string"
                }
              },
              "API-Version": {
                "description": "Compatibility version used for the response.",
                "schema": {
                  "type": "string",
                  "enum": [
                    "1"
                  ]
                }
              },
              "Deprecation": {
                "$ref": "#/components/headers/Deprecation"
              },
              "Sunset": {
                "$ref": "#/components/headers/Sunset"
              },
              "Link": {
                "$ref": "#/components/headers/DeprecationLink"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "401": {
            "description": "Authentication required",
            "headers": {
              "RateLimit": {
                "description": "Current quota, remaining requests, and reset time.",
                "schema": {
                  "type": "string"
                }
              },
              "RateLimit-Policy": {
                "description": "Quota policy and window applied to the credential.",
                "schema": {
                  "type": "string"
                }
              },
              "API-Version": {
                "description": "Compatibility version used for the response.",
                "schema": {
                  "type": "string",
                  "enum": [
                    "1"
                  ]
                }
              },
              "Deprecation": {
                "$ref": "#/components/headers/Deprecation"
              },
              "Sunset": {
                "$ref": "#/components/headers/Sunset"
              },
              "Link": {
                "$ref": "#/components/headers/DeprecationLink"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "403": {
            "description": "Insufficient scope or app binding",
            "headers": {
              "RateLimit": {
                "description": "Current quota, remaining requests, and reset time.",
                "schema": {
                  "type": "string"
                }
              },
              "RateLimit-Policy": {
                "description": "Quota policy and window applied to the credential.",
                "schema": {
                  "type": "string"
                }
              },
              "API-Version": {
                "description": "Compatibility version used for the response.",
                "schema": {
                  "type": "string",
                  "enum": [
                    "1"
                  ]
                }
              },
              "Deprecation": {
                "$ref": "#/components/headers/Deprecation"
              },
              "Sunset": {
                "$ref": "#/components/headers/Sunset"
              },
              "Link": {
                "$ref": "#/components/headers/DeprecationLink"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "No matching app in the authenticated organization",
            "headers": {
              "RateLimit": {
                "description": "Current quota, remaining requests, and reset time.",
                "schema": {
                  "type": "string"
                }
              },
              "RateLimit-Policy": {
                "description": "Quota policy and window applied to the credential.",
                "schema": {
                  "type": "string"
                }
              },
              "API-Version": {
                "description": "Compatibility version used for the response.",
                "schema": {
                  "type": "string",
                  "enum": [
                    "1"
                  ]
                }
              },
              "Deprecation": {
                "$ref": "#/components/headers/Deprecation"
              },
              "Sunset": {
                "$ref": "#/components/headers/Sunset"
              },
              "Link": {
                "$ref": "#/components/headers/DeprecationLink"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/api/sandbox/keywords": {
      "get": {
        "tags": [
          "Sandbox"
        ],
        "summary": "Read sandbox keyword ranks without authentication",
        "description": "Returns a fixed set of demonstration keyword-rank rows in the same `{searchTerms, store, country, rank}` shape as authenticated keyword reads. No account, credential, or key is required, so agents can evaluate the API before onboarding. Responses carry the standard `RateLimit` response headers and the anonymous pacing limit applies.\n",
        "security": [],
        "responses": {
          "200": {
            "description": "Demonstration keyword-rank rows.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "type": "object",
                    "properties": {
                      "_id": {
                        "type": "string"
                      },
                      "searchTerms": {
                        "type": "string"
                      },
                      "store": {
                        "type": "string",
                        "enum": [
                          "ios-app-store",
                          "macos-app-store",
                          "google-play",
                          "microsoft-store"
                        ]
                      },
                      "country": {
                        "type": "string"
                      },
                      "rank": {
                        "type": "integer"
                      }
                    }
                  }
                }
              }
            },
            "headers": {
              "RateLimit": {
                "description": "Current quota, remaining requests, and reset time.",
                "schema": {
                  "type": "string"
                }
              },
              "RateLimit-Policy": {
                "description": "Quota policy and window applied to the credential.",
                "schema": {
                  "type": "string"
                }
              },
              "API-Version": {
                "description": "Compatibility version used for the response.",
                "schema": {
                  "type": "string",
                  "enum": [
                    "1"
                  ]
                }
              },
              "Deprecation": {
                "$ref": "#/components/headers/Deprecation"
              },
              "Sunset": {
                "$ref": "#/components/headers/Sunset"
              },
              "Link": {
                "$ref": "#/components/headers/DeprecationLink"
              }
            }
          },
          "429": {
            "description": "Anonymous rate limit exceeded; retry after `Retry-After` seconds.",
            "headers": {
              "RateLimit": {
                "description": "Current quota, remaining requests, and reset time.",
                "schema": {
                  "type": "string"
                }
              },
              "RateLimit-Policy": {
                "description": "Quota policy and window applied to the credential.",
                "schema": {
                  "type": "string"
                }
              },
              "API-Version": {
                "description": "Compatibility version used for the response.",
                "schema": {
                  "type": "string",
                  "enum": [
                    "1"
                  ]
                }
              },
              "Deprecation": {
                "$ref": "#/components/headers/Deprecation"
              },
              "Sunset": {
                "$ref": "#/components/headers/Sunset"
              },
              "Link": {
                "$ref": "#/components/headers/DeprecationLink"
              },
              "Retry-After": {
                "description": "Seconds until the request may be retried.",
                "schema": {
                  "type": "integer"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        },
        "operationId": "getSandboxKeywords",
        "parameters": [
          {
            "in": "header",
            "name": "API-Version",
            "required": false,
            "description": "Compatibility version. Omit to use version 1; unsupported versions return 400.",
            "schema": {
              "type": "string",
              "enum": [
                "1"
              ],
              "default": "1"
            }
          }
        ]
      }
    },
    "/api/sandbox/rankchecks": {
      "post": {
        "tags": [
          "Sandbox"
        ],
        "summary": "Start a demonstration asynchronous rank check",
        "description": "Demonstrates the API's asynchronous-job pattern without authentication. The response is `202 Accepted` with a `Location` header pointing at the job resource and a body carrying the job `_id` and `status`. Poll the `Location` URL until the status is `succeeded`, then read the ranks from the job body. The job is deterministic fixture work that completes about two seconds after creation.\n",
        "security": [],
        "responses": {
          "202": {
            "description": "Job accepted; poll the `Location` URL for the result.",
            "headers": {
              "RateLimit": {
                "description": "Current quota, remaining requests, and reset time.",
                "schema": {
                  "type": "string"
                }
              },
              "RateLimit-Policy": {
                "description": "Quota policy and window applied to the credential.",
                "schema": {
                  "type": "string"
                }
              },
              "API-Version": {
                "description": "Compatibility version used for the response.",
                "schema": {
                  "type": "string",
                  "enum": [
                    "1"
                  ]
                }
              },
              "Deprecation": {
                "$ref": "#/components/headers/Deprecation"
              },
              "Sunset": {
                "$ref": "#/components/headers/Sunset"
              },
              "Link": {
                "$ref": "#/components/headers/DeprecationLink"
              },
              "Idempotency-Replayed": {
                "description": "True when a completed response was replayed for the supplied idempotency key.",
                "schema": {
                  "type": "boolean"
                }
              },
              "Location": {
                "description": "URL of the created job resource.",
                "schema": {
                  "type": "string",
                  "example": "/api/sandbox/rankchecks/c2FuZGJveGpvYnwxNzU2NTAwMDAwMDAw"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "_id": {
                      "type": "string"
                    },
                    "status": {
                      "type": "string",
                      "enum": [
                        "pending",
                        "running",
                        "succeeded"
                      ]
                    },
                    "creationTime": {
                      "type": "string",
                      "format": "date-time"
                    }
                  }
                }
              }
            }
          },
          "429": {
            "description": "Anonymous rate limit exceeded; retry after `Retry-After` seconds.",
            "headers": {
              "RateLimit": {
                "description": "Current quota, remaining requests, and reset time.",
                "schema": {
                  "type": "string"
                }
              },
              "RateLimit-Policy": {
                "description": "Quota policy and window applied to the credential.",
                "schema": {
                  "type": "string"
                }
              },
              "API-Version": {
                "description": "Compatibility version used for the response.",
                "schema": {
                  "type": "string",
                  "enum": [
                    "1"
                  ]
                }
              },
              "Deprecation": {
                "$ref": "#/components/headers/Deprecation"
              },
              "Sunset": {
                "$ref": "#/components/headers/Sunset"
              },
              "Link": {
                "$ref": "#/components/headers/DeprecationLink"
              },
              "Idempotency-Replayed": {
                "description": "True when a completed response was replayed for the supplied idempotency key.",
                "schema": {
                  "type": "boolean"
                }
              },
              "Retry-After": {
                "description": "Seconds until the request may be retried.",
                "schema": {
                  "type": "integer"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        },
        "operationId": "postSandboxRankchecks",
        "parameters": [
          {
            "in": "header",
            "name": "API-Version",
            "required": false,
            "description": "Compatibility version. Omit to use version 1; unsupported versions return 400.",
            "schema": {
              "type": "string",
              "enum": [
                "1"
              ],
              "default": "1"
            }
          },
          {
            "in": "header",
            "name": "Idempotency-Key",
            "required": false,
            "description": "Unique retry key retained for 24 hours (maximum 255 characters).",
            "schema": {
              "type": "string",
              "minLength": 1,
              "maxLength": 255
            }
          }
        ]
      }
    },
    "/api/sandbox/rankchecks/{jobId}": {
      "get": {
        "tags": [
          "Sandbox"
        ],
        "summary": "Poll a demonstration rank check",
        "description": "Reads the status of a demonstration job started at `POST /api/sandbox/rankchecks`. While the job runs the status is `running`; afterwards it is `succeeded` and the body carries the checked term's rank in every store carrying it. No authentication is required.\n",
        "security": [],
        "parameters": [
          {
            "in": "path",
            "name": "jobId",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "header",
            "name": "API-Version",
            "required": false,
            "description": "Compatibility version. Omit to use version 1; unsupported versions return 400.",
            "schema": {
              "type": "string",
              "enum": [
                "1"
              ],
              "default": "1"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Current job state.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "_id": {
                      "type": "string"
                    },
                    "status": {
                      "type": "string",
                      "enum": [
                        "pending",
                        "running",
                        "succeeded"
                      ]
                    },
                    "creationTime": {
                      "type": "string",
                      "format": "date-time"
                    },
                    "completionTime": {
                      "type": "string",
                      "format": "date-time"
                    },
                    "ranks": {
                      "type": "array",
                      "items": {
                        "type": "object",
                        "properties": {
                          "searchTerms": {
                            "type": "string"
                          },
                          "store": {
                            "type": "string"
                          },
                          "country": {
                            "type": "string"
                          },
                          "rank": {
                            "type": "integer"
                          }
                        }
                      }
                    }
                  }
                }
              }
            },
            "headers": {
              "RateLimit": {
                "description": "Current quota, remaining requests, and reset time.",
                "schema": {
                  "type": "string"
                }
              },
              "RateLimit-Policy": {
                "description": "Quota policy and window applied to the credential.",
                "schema": {
                  "type": "string"
                }
              },
              "API-Version": {
                "description": "Compatibility version used for the response.",
                "schema": {
                  "type": "string",
                  "enum": [
                    "1"
                  ]
                }
              },
              "Deprecation": {
                "$ref": "#/components/headers/Deprecation"
              },
              "Sunset": {
                "$ref": "#/components/headers/Sunset"
              },
              "Link": {
                "$ref": "#/components/headers/DeprecationLink"
              }
            }
          },
          "404": {
            "description": "Unknown job id.",
            "headers": {
              "RateLimit": {
                "description": "Current quota, remaining requests, and reset time.",
                "schema": {
                  "type": "string"
                }
              },
              "RateLimit-Policy": {
                "description": "Quota policy and window applied to the credential.",
                "schema": {
                  "type": "string"
                }
              },
              "API-Version": {
                "description": "Compatibility version used for the response.",
                "schema": {
                  "type": "string",
                  "enum": [
                    "1"
                  ]
                }
              },
              "Deprecation": {
                "$ref": "#/components/headers/Deprecation"
              },
              "Sunset": {
                "$ref": "#/components/headers/Sunset"
              },
              "Link": {
                "$ref": "#/components/headers/DeprecationLink"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        },
        "operationId": "getSandboxRankchecksByJobId"
      }
    },
    "/api/webhooksubscriptions": {
      "get": {
        "tags": [
          "Webhook subscriptions"
        ],
        "summary": "List webhook subscriptions",
        "description": "Webhook subscriptions deliver `app.created`, `app.updated`, `keyword.created`, `keyword.updated` and `keyword.deleted` events to your server as signed POST requests (`X-Appskyline-Signature: t=<timestamp>,v1=<hex HMAC-SHA256 of \"timestamp.body\">`). An endpoint failing 20 times in a row is disabled automatically. Subscriptions are managed with an operator access token; the `secret` is only returned once, on create.\n",
        "security": [
          {
            "accessToken": []
          }
        ],
        "responses": {
          "200": {
            "description": "Array of webhook subscriptions (without secrets)",
            "headers": {
              "RateLimit": {
                "description": "Current quota, remaining requests, and reset time.",
                "schema": {
                  "type": "string"
                }
              },
              "RateLimit-Policy": {
                "description": "Quota policy and window applied to the credential.",
                "schema": {
                  "type": "string"
                }
              },
              "API-Version": {
                "description": "Compatibility version used for the response.",
                "schema": {
                  "type": "string",
                  "enum": [
                    "1"
                  ]
                }
              },
              "Deprecation": {
                "$ref": "#/components/headers/Deprecation"
              },
              "Sunset": {
                "$ref": "#/components/headers/Sunset"
              },
              "Link": {
                "$ref": "#/components/headers/DeprecationLink"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/WebhookSubscription"
                  }
                }
              }
            }
          }
        },
        "operationId": "getWebhooksubscriptions",
        "parameters": [
          {
            "in": "header",
            "name": "API-Version",
            "required": false,
            "description": "Compatibility version. Omit to use version 1; unsupported versions return 400.",
            "schema": {
              "type": "string",
              "enum": [
                "1"
              ],
              "default": "1"
            }
          }
        ]
      },
      "post": {
        "tags": [
          "Webhook subscriptions"
        ],
        "summary": "Create a webhook subscription",
        "description": "The response includes the signing `secret` exactly once — store it; it cannot be retrieved again.\n",
        "security": [
          {
            "accessToken": []
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "url"
                ],
                "properties": {
                  "url": {
                    "type": "string",
                    "example": "https://example.com/appskyline-webhook"
                  },
                  "events": {
                    "type": "array",
                    "description": "Empty array subscribes to all events",
                    "items": {
                      "type": "string",
                      "enum": [
                        "app.created",
                        "app.updated",
                        "keyword.created",
                        "keyword.updated",
                        "keyword.deleted"
                      ]
                    }
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "The created subscription, including its secret",
            "headers": {
              "RateLimit": {
                "description": "Current quota, remaining requests, and reset time.",
                "schema": {
                  "type": "string"
                }
              },
              "RateLimit-Policy": {
                "description": "Quota policy and window applied to the credential.",
                "schema": {
                  "type": "string"
                }
              },
              "API-Version": {
                "description": "Compatibility version used for the response.",
                "schema": {
                  "type": "string",
                  "enum": [
                    "1"
                  ]
                }
              },
              "Deprecation": {
                "$ref": "#/components/headers/Deprecation"
              },
              "Sunset": {
                "$ref": "#/components/headers/Sunset"
              },
              "Link": {
                "$ref": "#/components/headers/DeprecationLink"
              },
              "Idempotency-Replayed": {
                "description": "True when a completed response was replayed for the supplied idempotency key.",
                "schema": {
                  "type": "boolean"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebhookSubscription"
                }
              }
            }
          }
        },
        "operationId": "postWebhooksubscriptions",
        "parameters": [
          {
            "in": "header",
            "name": "API-Version",
            "required": false,
            "description": "Compatibility version. Omit to use version 1; unsupported versions return 400.",
            "schema": {
              "type": "string",
              "enum": [
                "1"
              ],
              "default": "1"
            }
          },
          {
            "in": "header",
            "name": "Idempotency-Key",
            "required": false,
            "description": "Unique retry key retained for 24 hours (maximum 255 characters).",
            "schema": {
              "type": "string",
              "minLength": 1,
              "maxLength": 255
            }
          }
        ]
      }
    },
    "/api/webhooksubscriptions/{webhookSubscriptionId}": {
      "put": {
        "tags": [
          "Webhook subscriptions"
        ],
        "summary": "Update a webhook subscription",
        "description": "`url`, `events` and `active` are editable; the secret and organization are immutable. Re-enabling an auto-disabled endpoint is done by setting `active` back to true.\n",
        "security": [
          {
            "accessToken": []
          }
        ],
        "parameters": [
          {
            "in": "path",
            "name": "webhookSubscriptionId",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "header",
            "name": "API-Version",
            "required": false,
            "description": "Compatibility version. Omit to use version 1; unsupported versions return 400.",
            "schema": {
              "type": "string",
              "enum": [
                "1"
              ],
              "default": "1"
            }
          },
          {
            "in": "header",
            "name": "Idempotency-Key",
            "required": false,
            "description": "Unique retry key retained for 24 hours (maximum 255 characters).",
            "schema": {
              "type": "string",
              "minLength": 1,
              "maxLength": 255
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "The updated subscription (without secret)",
            "headers": {
              "RateLimit": {
                "description": "Current quota, remaining requests, and reset time.",
                "schema": {
                  "type": "string"
                }
              },
              "RateLimit-Policy": {
                "description": "Quota policy and window applied to the credential.",
                "schema": {
                  "type": "string"
                }
              },
              "API-Version": {
                "description": "Compatibility version used for the response.",
                "schema": {
                  "type": "string",
                  "enum": [
                    "1"
                  ]
                }
              },
              "Deprecation": {
                "$ref": "#/components/headers/Deprecation"
              },
              "Sunset": {
                "$ref": "#/components/headers/Sunset"
              },
              "Link": {
                "$ref": "#/components/headers/DeprecationLink"
              },
              "Idempotency-Replayed": {
                "description": "True when a completed response was replayed for the supplied idempotency key.",
                "schema": {
                  "type": "boolean"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebhookSubscription"
                }
              }
            }
          }
        },
        "operationId": "putWebhooksubscriptionsByWebhookSubscriptionId"
      },
      "delete": {
        "tags": [
          "Webhook subscriptions"
        ],
        "summary": "Delete a webhook subscription",
        "security": [
          {
            "accessToken": []
          }
        ],
        "parameters": [
          {
            "in": "path",
            "name": "webhookSubscriptionId",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "header",
            "name": "API-Version",
            "required": false,
            "description": "Compatibility version. Omit to use version 1; unsupported versions return 400.",
            "schema": {
              "type": "string",
              "enum": [
                "1"
              ],
              "default": "1"
            }
          },
          {
            "in": "header",
            "name": "Idempotency-Key",
            "required": false,
            "description": "Unique retry key retained for 24 hours (maximum 255 characters).",
            "schema": {
              "type": "string",
              "minLength": 1,
              "maxLength": 255
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Deleted",
            "headers": {
              "RateLimit": {
                "description": "Current quota, remaining requests, and reset time.",
                "schema": {
                  "type": "string"
                }
              },
              "RateLimit-Policy": {
                "description": "Quota policy and window applied to the credential.",
                "schema": {
                  "type": "string"
                }
              },
              "API-Version": {
                "description": "Compatibility version used for the response.",
                "schema": {
                  "type": "string",
                  "enum": [
                    "1"
                  ]
                }
              },
              "Deprecation": {
                "$ref": "#/components/headers/Deprecation"
              },
              "Sunset": {
                "$ref": "#/components/headers/Sunset"
              },
              "Link": {
                "$ref": "#/components/headers/DeprecationLink"
              },
              "Idempotency-Replayed": {
                "description": "True when a completed response was replayed for the supplied idempotency key.",
                "schema": {
                  "type": "boolean"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DeleteResult"
                }
              }
            }
          }
        },
        "operationId": "deleteWebhooksubscriptionsByWebhookSubscriptionId"
      }
    }
  },
  "tags": []
}
