{"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>`."}}},"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"}}],"responses":{"200":{"description":"Array of engagement rows"},"403":{"description":"API key is missing the `stats:read` scope"},"429":{"description":"API key rate limit exceeded"}},"operationId":"getApiAppleAppStoreEngagement","x-codeSamples":[{"lang":"Node + Request","source":"const request = require('request');\n\nconst options = {\n  method: 'GET',\n  url: 'https://api.appskyline.com/api/apple-app-store-engagement',\n  qs: {appId: 'SOME_STRING_VALUE', days: 'SOME_INTEGER_VALUE'},\n  headers: {Authorization: 'Basic REPLACE_BASIC_AUTH'}\n};\n\nrequest(options, function (error, response, body) {\n  if (error) throw new Error(error);\n\n  console.log(body);\n});\n"},{"lang":"Shell + Curl","source":"curl --request GET \\\n  --url 'https://api.appskyline.com/api/apple-app-store-engagement?appId=SOME_STRING_VALUE&days=SOME_INTEGER_VALUE' \\\n  --header 'Authorization: Basic REPLACE_BASIC_AUTH'"},{"lang":"Shell + Httpie","source":"http GET 'https://api.appskyline.com/api/apple-app-store-engagement?appId=SOME_STRING_VALUE&days=SOME_INTEGER_VALUE' \\\n  Authorization:'Basic REPLACE_BASIC_AUTH'"},{"lang":"Python + Python3","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"api.appskyline.com\")\n\nheaders = { 'Authorization': \"Basic REPLACE_BASIC_AUTH\" }\n\nconn.request(\"GET\", \"/api/apple-app-store-engagement?appId=SOME_STRING_VALUE&days=SOME_INTEGER_VALUE\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"},{"lang":"Php + Curl","source":"<?php\n\n$curl = curl_init();\n\ncurl_setopt_array($curl, [\n  CURLOPT_URL => \"https://api.appskyline.com/api/apple-app-store-engagement?appId=SOME_STRING_VALUE&days=SOME_INTEGER_VALUE\",\n  CURLOPT_RETURNTRANSFER => true,\n  CURLOPT_ENCODING => \"\",\n  CURLOPT_MAXREDIRS => 10,\n  CURLOPT_TIMEOUT => 30,\n  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,\n  CURLOPT_CUSTOMREQUEST => \"GET\",\n  CURLOPT_HTTPHEADER => [\n    \"Authorization: Basic REPLACE_BASIC_AUTH\"\n  ],\n]);\n\n$response = curl_exec($curl);\n$err = curl_error($curl);\n\ncurl_close($curl);\n\nif ($err) {\n  echo \"cURL Error #:\" . $err;\n} else {\n  echo $response;\n}"},{"lang":"Php + Http1","source":"<?php\n\n$request = new HttpRequest();\n$request->setUrl('https://api.appskyline.com/api/apple-app-store-engagement');\n$request->setMethod(HTTP_METH_GET);\n\n$request->setQueryData([\n  'appId' => 'SOME_STRING_VALUE',\n  'days' => 'SOME_INTEGER_VALUE'\n]);\n\n$request->setHeaders([\n  'Authorization' => 'Basic REPLACE_BASIC_AUTH'\n]);\n\ntry {\n  $response = $request->send();\n\n  echo $response->getBody();\n} catch (HttpException $ex) {\n  echo $ex;\n}"},{"lang":"Php + Http2","source":"<?php\n\n$client = new http\\Client;\n$request = new http\\Client\\Request;\n\n$request->setRequestUrl('https://api.appskyline.com/api/apple-app-store-engagement');\n$request->setRequestMethod('GET');\n$request->setQuery(new http\\QueryString([\n  'appId' => 'SOME_STRING_VALUE',\n  'days' => 'SOME_INTEGER_VALUE'\n]));\n\n$request->setHeaders([\n  'Authorization' => 'Basic REPLACE_BASIC_AUTH'\n]);\n\n$client->enqueue($request)->send();\n$response = $client->getResponse();\n\necho $response->getBody();"}]}},"/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"},"401":{"description":"Missing or invalid credentials"},"403":{"description":"API key is missing the `apps:read` scope"},"429":{"description":"API key rate limit exceeded"}},"operationId":"getApiApps","x-codeSamples":[{"lang":"Node + Request","source":"const request = require('request');\n\nconst options = {\n  method: 'GET',\n  url: 'https://api.appskyline.com/api/apps',\n  headers: {Authorization: 'Basic REPLACE_BASIC_AUTH'}\n};\n\nrequest(options, function (error, response, body) {\n  if (error) throw new Error(error);\n\n  console.log(body);\n});\n"},{"lang":"Shell + Curl","source":"curl --request GET \\\n  --url https://api.appskyline.com/api/apps \\\n  --header 'Authorization: Basic REPLACE_BASIC_AUTH'"},{"lang":"Shell + Httpie","source":"http GET https://api.appskyline.com/api/apps \\\n  Authorization:'Basic REPLACE_BASIC_AUTH'"},{"lang":"Python + Python3","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"api.appskyline.com\")\n\nheaders = { 'Authorization': \"Basic REPLACE_BASIC_AUTH\" }\n\nconn.request(\"GET\", \"/api/apps\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"},{"lang":"Php + Curl","source":"<?php\n\n$curl = curl_init();\n\ncurl_setopt_array($curl, [\n  CURLOPT_URL => \"https://api.appskyline.com/api/apps\",\n  CURLOPT_RETURNTRANSFER => true,\n  CURLOPT_ENCODING => \"\",\n  CURLOPT_MAXREDIRS => 10,\n  CURLOPT_TIMEOUT => 30,\n  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,\n  CURLOPT_CUSTOMREQUEST => \"GET\",\n  CURLOPT_HTTPHEADER => [\n    \"Authorization: Basic REPLACE_BASIC_AUTH\"\n  ],\n]);\n\n$response = curl_exec($curl);\n$err = curl_error($curl);\n\ncurl_close($curl);\n\nif ($err) {\n  echo \"cURL Error #:\" . $err;\n} else {\n  echo $response;\n}"},{"lang":"Php + Http1","source":"<?php\n\n$request = new HttpRequest();\n$request->setUrl('https://api.appskyline.com/api/apps');\n$request->setMethod(HTTP_METH_GET);\n\n$request->setHeaders([\n  'Authorization' => 'Basic REPLACE_BASIC_AUTH'\n]);\n\ntry {\n  $response = $request->send();\n\n  echo $response->getBody();\n} catch (HttpException $ex) {\n  echo $ex;\n}"},{"lang":"Php + Http2","source":"<?php\n\n$client = new http\\Client;\n$request = new http\\Client\\Request;\n\n$request->setRequestUrl('https://api.appskyline.com/api/apps');\n$request->setRequestMethod('GET');\n$request->setHeaders([\n  'Authorization' => 'Basic REPLACE_BASIC_AUTH'\n]);\n\n$client->enqueue($request)->send();\n$response = $client->getResponse();\n\necho $response->getBody();"}]},"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"},"403":{"description":"API key is missing the `apps:write` scope"},"409":{"description":"Domain is already taken"}},"operationId":"postApiApps","x-codeSamples":[{"lang":"Node + Request","source":"const request = require('request');\n\nconst options = {\n  method: 'POST',\n  url: 'https://api.appskyline.com/api/apps',\n  headers: {'content-type': 'application/json', Authorization: 'Basic REPLACE_BASIC_AUTH'},\n  body: {},\n  json: true\n};\n\nrequest(options, function (error, response, body) {\n  if (error) throw new Error(error);\n\n  console.log(body);\n});\n"},{"lang":"Shell + Curl","source":"curl --request POST \\\n  --url https://api.appskyline.com/api/apps \\\n  --header 'Authorization: Basic REPLACE_BASIC_AUTH' \\\n  --header 'content-type: application/json' \\\n  --data '{}'"},{"lang":"Shell + Httpie","source":"echo '{}' |  \\\n  http POST https://api.appskyline.com/api/apps \\\n  Authorization:'Basic REPLACE_BASIC_AUTH' \\\n  content-type:application/json"},{"lang":"Python + Python3","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"api.appskyline.com\")\n\npayload = \"{}\"\n\nheaders = {\n    'content-type': \"application/json\",\n    'Authorization': \"Basic REPLACE_BASIC_AUTH\"\n    }\n\nconn.request(\"POST\", \"/api/apps\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"},{"lang":"Php + Curl","source":"<?php\n\n$curl = curl_init();\n\ncurl_setopt_array($curl, [\n  CURLOPT_URL => \"https://api.appskyline.com/api/apps\",\n  CURLOPT_RETURNTRANSFER => true,\n  CURLOPT_ENCODING => \"\",\n  CURLOPT_MAXREDIRS => 10,\n  CURLOPT_TIMEOUT => 30,\n  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,\n  CURLOPT_CUSTOMREQUEST => \"POST\",\n  CURLOPT_POSTFIELDS => \"{}\",\n  CURLOPT_HTTPHEADER => [\n    \"Authorization: Basic REPLACE_BASIC_AUTH\",\n    \"content-type: application/json\"\n  ],\n]);\n\n$response = curl_exec($curl);\n$err = curl_error($curl);\n\ncurl_close($curl);\n\nif ($err) {\n  echo \"cURL Error #:\" . $err;\n} else {\n  echo $response;\n}"},{"lang":"Php + Http1","source":"<?php\n\n$request = new HttpRequest();\n$request->setUrl('https://api.appskyline.com/api/apps');\n$request->setMethod(HTTP_METH_POST);\n\n$request->setHeaders([\n  'content-type' => 'application/json',\n  'Authorization' => 'Basic REPLACE_BASIC_AUTH'\n]);\n\n$request->setBody('{}');\n\ntry {\n  $response = $request->send();\n\n  echo $response->getBody();\n} catch (HttpException $ex) {\n  echo $ex;\n}"},{"lang":"Php + Http2","source":"<?php\n\n$client = new http\\Client;\n$request = new http\\Client\\Request;\n\n$body = new http\\Message\\Body;\n$body->append('{}');\n\n$request->setRequestUrl('https://api.appskyline.com/api/apps');\n$request->setRequestMethod('POST');\n$request->setBody($body);\n\n$request->setHeaders([\n  'content-type' => 'application/json',\n  'Authorization' => 'Basic REPLACE_BASIC_AUTH'\n]);\n\n$client->enqueue($request)->send();\n$response = $client->getResponse();\n\necho $response->getBody();"}]}},"/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"}}],"responses":{"200":{"description":"The app"},"403":{"description":"API key is missing the `apps:read` scope"},"404":{"description":"No such app in your organization"}},"operationId":"getApiAppsAppId","x-codeSamples":[{"lang":"Node + Request","source":"const request = require('request');\n\nconst options = {\n  method: 'GET',\n  url: 'https://api.appskyline.com/api/apps/%7BappId%7D',\n  headers: {Authorization: 'Basic REPLACE_BASIC_AUTH'}\n};\n\nrequest(options, function (error, response, body) {\n  if (error) throw new Error(error);\n\n  console.log(body);\n});\n"},{"lang":"Shell + Curl","source":"curl --request GET \\\n  --url https://api.appskyline.com/api/apps/%7BappId%7D \\\n  --header 'Authorization: Basic REPLACE_BASIC_AUTH'"},{"lang":"Shell + Httpie","source":"http GET https://api.appskyline.com/api/apps/%7BappId%7D \\\n  Authorization:'Basic REPLACE_BASIC_AUTH'"},{"lang":"Python + Python3","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"api.appskyline.com\")\n\nheaders = { 'Authorization': \"Basic REPLACE_BASIC_AUTH\" }\n\nconn.request(\"GET\", \"/api/apps/%7BappId%7D\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"},{"lang":"Php + Curl","source":"<?php\n\n$curl = curl_init();\n\ncurl_setopt_array($curl, [\n  CURLOPT_URL => \"https://api.appskyline.com/api/apps/%7BappId%7D\",\n  CURLOPT_RETURNTRANSFER => true,\n  CURLOPT_ENCODING => \"\",\n  CURLOPT_MAXREDIRS => 10,\n  CURLOPT_TIMEOUT => 30,\n  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,\n  CURLOPT_CUSTOMREQUEST => \"GET\",\n  CURLOPT_HTTPHEADER => [\n    \"Authorization: Basic REPLACE_BASIC_AUTH\"\n  ],\n]);\n\n$response = curl_exec($curl);\n$err = curl_error($curl);\n\ncurl_close($curl);\n\nif ($err) {\n  echo \"cURL Error #:\" . $err;\n} else {\n  echo $response;\n}"},{"lang":"Php + Http1","source":"<?php\n\n$request = new HttpRequest();\n$request->setUrl('https://api.appskyline.com/api/apps/%7BappId%7D');\n$request->setMethod(HTTP_METH_GET);\n\n$request->setHeaders([\n  'Authorization' => 'Basic REPLACE_BASIC_AUTH'\n]);\n\ntry {\n  $response = $request->send();\n\n  echo $response->getBody();\n} catch (HttpException $ex) {\n  echo $ex;\n}"},{"lang":"Php + Http2","source":"<?php\n\n$client = new http\\Client;\n$request = new http\\Client\\Request;\n\n$request->setRequestUrl('https://api.appskyline.com/api/apps/%7BappId%7D');\n$request->setRequestMethod('GET');\n$request->setHeaders([\n  'Authorization' => 'Basic REPLACE_BASIC_AUTH'\n]);\n\n$client->enqueue($request)->send();\n$response = $client->getResponse();\n\necho $response->getBody();"}]},"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"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"description":"The updated app"},"404":{"description":"No such app in your organization"},"409":{"description":"Domain is already taken"}},"operationId":"putApiAppsAppId","x-codeSamples":[{"lang":"Node + Request","source":"const request = require('request');\n\nconst options = {\n  method: 'PUT',\n  url: 'https://api.appskyline.com/api/apps/%7BappId%7D',\n  headers: {'content-type': 'application/json', Authorization: 'Basic REPLACE_BASIC_AUTH'},\n  body: {},\n  json: true\n};\n\nrequest(options, function (error, response, body) {\n  if (error) throw new Error(error);\n\n  console.log(body);\n});\n"},{"lang":"Shell + Curl","source":"curl --request PUT \\\n  --url https://api.appskyline.com/api/apps/%7BappId%7D \\\n  --header 'Authorization: Basic REPLACE_BASIC_AUTH' \\\n  --header 'content-type: application/json' \\\n  --data '{}'"},{"lang":"Shell + Httpie","source":"echo '{}' |  \\\n  http PUT https://api.appskyline.com/api/apps/%7BappId%7D \\\n  Authorization:'Basic REPLACE_BASIC_AUTH' \\\n  content-type:application/json"},{"lang":"Python + Python3","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"api.appskyline.com\")\n\npayload = \"{}\"\n\nheaders = {\n    'content-type': \"application/json\",\n    'Authorization': \"Basic REPLACE_BASIC_AUTH\"\n    }\n\nconn.request(\"PUT\", \"/api/apps/%7BappId%7D\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"},{"lang":"Php + Curl","source":"<?php\n\n$curl = curl_init();\n\ncurl_setopt_array($curl, [\n  CURLOPT_URL => \"https://api.appskyline.com/api/apps/%7BappId%7D\",\n  CURLOPT_RETURNTRANSFER => true,\n  CURLOPT_ENCODING => \"\",\n  CURLOPT_MAXREDIRS => 10,\n  CURLOPT_TIMEOUT => 30,\n  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,\n  CURLOPT_CUSTOMREQUEST => \"PUT\",\n  CURLOPT_POSTFIELDS => \"{}\",\n  CURLOPT_HTTPHEADER => [\n    \"Authorization: Basic REPLACE_BASIC_AUTH\",\n    \"content-type: application/json\"\n  ],\n]);\n\n$response = curl_exec($curl);\n$err = curl_error($curl);\n\ncurl_close($curl);\n\nif ($err) {\n  echo \"cURL Error #:\" . $err;\n} else {\n  echo $response;\n}"},{"lang":"Php + Http1","source":"<?php\n\n$request = new HttpRequest();\n$request->setUrl('https://api.appskyline.com/api/apps/%7BappId%7D');\n$request->setMethod(HTTP_METH_PUT);\n\n$request->setHeaders([\n  'content-type' => 'application/json',\n  'Authorization' => 'Basic REPLACE_BASIC_AUTH'\n]);\n\n$request->setBody('{}');\n\ntry {\n  $response = $request->send();\n\n  echo $response->getBody();\n} catch (HttpException $ex) {\n  echo $ex;\n}"},{"lang":"Php + Http2","source":"<?php\n\n$client = new http\\Client;\n$request = new http\\Client\\Request;\n\n$body = new http\\Message\\Body;\n$body->append('{}');\n\n$request->setRequestUrl('https://api.appskyline.com/api/apps/%7BappId%7D');\n$request->setRequestMethod('PUT');\n$request->setBody($body);\n\n$request->setHeaders([\n  'content-type' => 'application/json',\n  'Authorization' => 'Basic REPLACE_BASIC_AUTH'\n]);\n\n$client->enqueue($request)->send();\n$response = $client->getResponse();\n\necho $response->getBody();"}]}},"/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"},"401":{"description":"Missing or invalid credentials"},"403":{"description":"A requested collection is not batch-readable"}},"operationId":"postApiBatch","x-codeSamples":[{"lang":"Node + Request","source":"const request = require('request');\n\nconst options = {\n  method: 'POST',\n  url: 'https://api.appskyline.com/api/batch',\n  headers: {'content-type': 'application/json', Authorization: 'REPLACE_KEY_VALUE'},\n  body: [{alias: 'string', url: 'string'}],\n  json: true\n};\n\nrequest(options, function (error, response, body) {\n  if (error) throw new Error(error);\n\n  console.log(body);\n});\n"},{"lang":"Shell + Curl","source":"curl --request POST \\\n  --url https://api.appskyline.com/api/batch \\\n  --header 'Authorization: REPLACE_KEY_VALUE' \\\n  --header 'content-type: application/json' \\\n  --data '[{\"alias\":\"string\",\"url\":\"string\"}]'"},{"lang":"Shell + Httpie","source":"echo '[{\"alias\":\"string\",\"url\":\"string\"}]' |  \\\n  http POST https://api.appskyline.com/api/batch \\\n  Authorization:REPLACE_KEY_VALUE \\\n  content-type:application/json"},{"lang":"Python + Python3","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"api.appskyline.com\")\n\npayload = \"[{\\\"alias\\\":\\\"string\\\",\\\"url\\\":\\\"string\\\"}]\"\n\nheaders = {\n    'content-type': \"application/json\",\n    'Authorization': \"REPLACE_KEY_VALUE\"\n    }\n\nconn.request(\"POST\", \"/api/batch\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"},{"lang":"Php + Curl","source":"<?php\n\n$curl = curl_init();\n\ncurl_setopt_array($curl, [\n  CURLOPT_URL => \"https://api.appskyline.com/api/batch\",\n  CURLOPT_RETURNTRANSFER => true,\n  CURLOPT_ENCODING => \"\",\n  CURLOPT_MAXREDIRS => 10,\n  CURLOPT_TIMEOUT => 30,\n  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,\n  CURLOPT_CUSTOMREQUEST => \"POST\",\n  CURLOPT_POSTFIELDS => \"[{\\\"alias\\\":\\\"string\\\",\\\"url\\\":\\\"string\\\"}]\",\n  CURLOPT_HTTPHEADER => [\n    \"Authorization: REPLACE_KEY_VALUE\",\n    \"content-type: application/json\"\n  ],\n]);\n\n$response = curl_exec($curl);\n$err = curl_error($curl);\n\ncurl_close($curl);\n\nif ($err) {\n  echo \"cURL Error #:\" . $err;\n} else {\n  echo $response;\n}"},{"lang":"Php + Http1","source":"<?php\n\n$request = new HttpRequest();\n$request->setUrl('https://api.appskyline.com/api/batch');\n$request->setMethod(HTTP_METH_POST);\n\n$request->setHeaders([\n  'content-type' => 'application/json',\n  'Authorization' => 'REPLACE_KEY_VALUE'\n]);\n\n$request->setBody('[{\"alias\":\"string\",\"url\":\"string\"}]');\n\ntry {\n  $response = $request->send();\n\n  echo $response->getBody();\n} catch (HttpException $ex) {\n  echo $ex;\n}"},{"lang":"Php + Http2","source":"<?php\n\n$client = new http\\Client;\n$request = new http\\Client\\Request;\n\n$body = new http\\Message\\Body;\n$body->append('[{\"alias\":\"string\",\"url\":\"string\"}]');\n\n$request->setRequestUrl('https://api.appskyline.com/api/batch');\n$request->setRequestMethod('POST');\n$request->setBody($body);\n\n$request->setHeaders([\n  'content-type' => 'application/json',\n  'Authorization' => 'REPLACE_KEY_VALUE'\n]);\n\n$client->enqueue($request)->send();\n$response = $client->getResponse();\n\necho $response->getBody();"}]}},"/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"}}],"responses":{"200":{"description":"Operation result; includes appId and packageName. Commit is not proof of publication.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid input or Google API error; details retain upstream status and review action"},"401":{"description":"Authentication required"},"403":{"description":"Insufficient scope, app binding, or administrator role"},"404":{"description":"App not found in the authenticated organization"}},"x-codeSamples":[{"lang":"Node + Request","source":"const request = require('request');\n\nconst options = {\n  method: 'GET',\n  url: 'https://api.appskyline.com/api/apps/%7BappId%7D/google-play/credentials/check',\n  qs: {track: 'SOME_STRING_VALUE'},\n  headers: {Authorization: 'Basic REPLACE_BASIC_AUTH'}\n};\n\nrequest(options, function (error, response, body) {\n  if (error) throw new Error(error);\n\n  console.log(body);\n});\n"},{"lang":"Shell + Curl","source":"curl --request GET \\\n  --url 'https://api.appskyline.com/api/apps/%7BappId%7D/google-play/credentials/check?track=SOME_STRING_VALUE' \\\n  --header 'Authorization: Basic REPLACE_BASIC_AUTH'"},{"lang":"Shell + Httpie","source":"http GET 'https://api.appskyline.com/api/apps/%7BappId%7D/google-play/credentials/check?track=SOME_STRING_VALUE' \\\n  Authorization:'Basic REPLACE_BASIC_AUTH'"},{"lang":"Python + Python3","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"api.appskyline.com\")\n\nheaders = { 'Authorization': \"Basic REPLACE_BASIC_AUTH\" }\n\nconn.request(\"GET\", \"/api/apps/%7BappId%7D/google-play/credentials/check?track=SOME_STRING_VALUE\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"},{"lang":"Php + Curl","source":"<?php\n\n$curl = curl_init();\n\ncurl_setopt_array($curl, [\n  CURLOPT_URL => \"https://api.appskyline.com/api/apps/%7BappId%7D/google-play/credentials/check?track=SOME_STRING_VALUE\",\n  CURLOPT_RETURNTRANSFER => true,\n  CURLOPT_ENCODING => \"\",\n  CURLOPT_MAXREDIRS => 10,\n  CURLOPT_TIMEOUT => 30,\n  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,\n  CURLOPT_CUSTOMREQUEST => \"GET\",\n  CURLOPT_HTTPHEADER => [\n    \"Authorization: Basic REPLACE_BASIC_AUTH\"\n  ],\n]);\n\n$response = curl_exec($curl);\n$err = curl_error($curl);\n\ncurl_close($curl);\n\nif ($err) {\n  echo \"cURL Error #:\" . $err;\n} else {\n  echo $response;\n}"},{"lang":"Php + Http1","source":"<?php\n\n$request = new HttpRequest();\n$request->setUrl('https://api.appskyline.com/api/apps/%7BappId%7D/google-play/credentials/check');\n$request->setMethod(HTTP_METH_GET);\n\n$request->setQueryData([\n  'track' => 'SOME_STRING_VALUE'\n]);\n\n$request->setHeaders([\n  'Authorization' => 'Basic REPLACE_BASIC_AUTH'\n]);\n\ntry {\n  $response = $request->send();\n\n  echo $response->getBody();\n} catch (HttpException $ex) {\n  echo $ex;\n}"},{"lang":"Php + Http2","source":"<?php\n\n$client = new http\\Client;\n$request = new http\\Client\\Request;\n\n$request->setRequestUrl('https://api.appskyline.com/api/apps/%7BappId%7D/google-play/credentials/check');\n$request->setRequestMethod('GET');\n$request->setQuery(new http\\QueryString([\n  'track' => 'SOME_STRING_VALUE'\n]));\n\n$request->setHeaders([\n  'Authorization' => 'Basic REPLACE_BASIC_AUTH'\n]);\n\n$client->enqueue($request)->send();\n$response = $client->getResponse();\n\necho $response->getBody();"}]}},"/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"}}],"responses":{"200":{"description":"Operation result; includes appId and packageName. Commit is not proof of publication.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid input or Google API error; details retain upstream status and review action"},"401":{"description":"Authentication required"},"403":{"description":"Insufficient scope, app binding, or administrator role"},"404":{"description":"App not found in the authenticated organization"}},"x-codeSamples":[{"lang":"Node + Request","source":"const request = require('request');\n\nconst options = {\n  method: 'GET',\n  url: 'https://api.appskyline.com/api/apps/%7BappId%7D/google-play/releases',\n  qs: {track: 'SOME_STRING_VALUE'},\n  headers: {Authorization: 'Basic REPLACE_BASIC_AUTH'}\n};\n\nrequest(options, function (error, response, body) {\n  if (error) throw new Error(error);\n\n  console.log(body);\n});\n"},{"lang":"Shell + Curl","source":"curl --request GET \\\n  --url 'https://api.appskyline.com/api/apps/%7BappId%7D/google-play/releases?track=SOME_STRING_VALUE' \\\n  --header 'Authorization: Basic REPLACE_BASIC_AUTH'"},{"lang":"Shell + Httpie","source":"http GET 'https://api.appskyline.com/api/apps/%7BappId%7D/google-play/releases?track=SOME_STRING_VALUE' \\\n  Authorization:'Basic REPLACE_BASIC_AUTH'"},{"lang":"Python + Python3","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"api.appskyline.com\")\n\nheaders = { 'Authorization': \"Basic REPLACE_BASIC_AUTH\" }\n\nconn.request(\"GET\", \"/api/apps/%7BappId%7D/google-play/releases?track=SOME_STRING_VALUE\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"},{"lang":"Php + Curl","source":"<?php\n\n$curl = curl_init();\n\ncurl_setopt_array($curl, [\n  CURLOPT_URL => \"https://api.appskyline.com/api/apps/%7BappId%7D/google-play/releases?track=SOME_STRING_VALUE\",\n  CURLOPT_RETURNTRANSFER => true,\n  CURLOPT_ENCODING => \"\",\n  CURLOPT_MAXREDIRS => 10,\n  CURLOPT_TIMEOUT => 30,\n  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,\n  CURLOPT_CUSTOMREQUEST => \"GET\",\n  CURLOPT_HTTPHEADER => [\n    \"Authorization: Basic REPLACE_BASIC_AUTH\"\n  ],\n]);\n\n$response = curl_exec($curl);\n$err = curl_error($curl);\n\ncurl_close($curl);\n\nif ($err) {\n  echo \"cURL Error #:\" . $err;\n} else {\n  echo $response;\n}"},{"lang":"Php + Http1","source":"<?php\n\n$request = new HttpRequest();\n$request->setUrl('https://api.appskyline.com/api/apps/%7BappId%7D/google-play/releases');\n$request->setMethod(HTTP_METH_GET);\n\n$request->setQueryData([\n  'track' => 'SOME_STRING_VALUE'\n]);\n\n$request->setHeaders([\n  'Authorization' => 'Basic REPLACE_BASIC_AUTH'\n]);\n\ntry {\n  $response = $request->send();\n\n  echo $response->getBody();\n} catch (HttpException $ex) {\n  echo $ex;\n}"},{"lang":"Php + Http2","source":"<?php\n\n$client = new http\\Client;\n$request = new http\\Client\\Request;\n\n$request->setRequestUrl('https://api.appskyline.com/api/apps/%7BappId%7D/google-play/releases');\n$request->setRequestMethod('GET');\n$request->setQuery(new http\\QueryString([\n  'track' => 'SOME_STRING_VALUE'\n]));\n\n$request->setHeaders([\n  'Authorization' => 'Basic REPLACE_BASIC_AUTH'\n]);\n\n$client->enqueue($request)->send();\n$response = $client->getResponse();\n\necho $response->getBody();"}]}},"/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"}}],"responses":{"200":{"description":"Operation result; includes appId and packageName. Commit is not proof of publication.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid input or Google API error; details retain upstream status and review action"},"401":{"description":"Authentication required"},"403":{"description":"Insufficient scope, app binding, or administrator role"},"404":{"description":"App not found in the authenticated organization"}},"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}}}}}}}}},"x-codeSamples":[{"lang":"Node + Request","source":"const request = require('request');\n\nconst options = {\n  method: 'POST',\n  url: 'https://api.appskyline.com/api/apps/%7BappId%7D/google-play/release/plan',\n  qs: {track: 'SOME_STRING_VALUE'},\n  headers: {'content-type': 'application/json', Authorization: 'Basic REPLACE_BASIC_AUTH'},\n  body: {\n    versionCodes: ['string'],\n    status: 'draft',\n    userFraction: 0,\n    name: 'string',\n    releaseNotes: [{language: 'string', text: 'string'}]\n  },\n  json: true\n};\n\nrequest(options, function (error, response, body) {\n  if (error) throw new Error(error);\n\n  console.log(body);\n});\n"},{"lang":"Shell + Curl","source":"curl --request POST \\\n  --url 'https://api.appskyline.com/api/apps/%7BappId%7D/google-play/release/plan?track=SOME_STRING_VALUE' \\\n  --header 'Authorization: Basic REPLACE_BASIC_AUTH' \\\n  --header 'content-type: application/json' \\\n  --data '{\"versionCodes\":[\"string\"],\"status\":\"draft\",\"userFraction\":0,\"name\":\"string\",\"releaseNotes\":[{\"language\":\"string\",\"text\":\"string\"}]}'"},{"lang":"Shell + Httpie","source":"echo '{\"versionCodes\":[\"string\"],\"status\":\"draft\",\"userFraction\":0,\"name\":\"string\",\"releaseNotes\":[{\"language\":\"string\",\"text\":\"string\"}]}' |  \\\n  http POST 'https://api.appskyline.com/api/apps/%7BappId%7D/google-play/release/plan?track=SOME_STRING_VALUE' \\\n  Authorization:'Basic REPLACE_BASIC_AUTH' \\\n  content-type:application/json"},{"lang":"Python + Python3","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"api.appskyline.com\")\n\npayload = \"{\\\"versionCodes\\\":[\\\"string\\\"],\\\"status\\\":\\\"draft\\\",\\\"userFraction\\\":0,\\\"name\\\":\\\"string\\\",\\\"releaseNotes\\\":[{\\\"language\\\":\\\"string\\\",\\\"text\\\":\\\"string\\\"}]}\"\n\nheaders = {\n    'content-type': \"application/json\",\n    'Authorization': \"Basic REPLACE_BASIC_AUTH\"\n    }\n\nconn.request(\"POST\", \"/api/apps/%7BappId%7D/google-play/release/plan?track=SOME_STRING_VALUE\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"},{"lang":"Php + Curl","source":"<?php\n\n$curl = curl_init();\n\ncurl_setopt_array($curl, [\n  CURLOPT_URL => \"https://api.appskyline.com/api/apps/%7BappId%7D/google-play/release/plan?track=SOME_STRING_VALUE\",\n  CURLOPT_RETURNTRANSFER => true,\n  CURLOPT_ENCODING => \"\",\n  CURLOPT_MAXREDIRS => 10,\n  CURLOPT_TIMEOUT => 30,\n  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,\n  CURLOPT_CUSTOMREQUEST => \"POST\",\n  CURLOPT_POSTFIELDS => \"{\\\"versionCodes\\\":[\\\"string\\\"],\\\"status\\\":\\\"draft\\\",\\\"userFraction\\\":0,\\\"name\\\":\\\"string\\\",\\\"releaseNotes\\\":[{\\\"language\\\":\\\"string\\\",\\\"text\\\":\\\"string\\\"}]}\",\n  CURLOPT_HTTPHEADER => [\n    \"Authorization: Basic REPLACE_BASIC_AUTH\",\n    \"content-type: application/json\"\n  ],\n]);\n\n$response = curl_exec($curl);\n$err = curl_error($curl);\n\ncurl_close($curl);\n\nif ($err) {\n  echo \"cURL Error #:\" . $err;\n} else {\n  echo $response;\n}"},{"lang":"Php + Http1","source":"<?php\n\n$request = new HttpRequest();\n$request->setUrl('https://api.appskyline.com/api/apps/%7BappId%7D/google-play/release/plan');\n$request->setMethod(HTTP_METH_POST);\n\n$request->setQueryData([\n  'track' => 'SOME_STRING_VALUE'\n]);\n\n$request->setHeaders([\n  'content-type' => 'application/json',\n  'Authorization' => 'Basic REPLACE_BASIC_AUTH'\n]);\n\n$request->setBody('{\"versionCodes\":[\"string\"],\"status\":\"draft\",\"userFraction\":0,\"name\":\"string\",\"releaseNotes\":[{\"language\":\"string\",\"text\":\"string\"}]}');\n\ntry {\n  $response = $request->send();\n\n  echo $response->getBody();\n} catch (HttpException $ex) {\n  echo $ex;\n}"},{"lang":"Php + Http2","source":"<?php\n\n$client = new http\\Client;\n$request = new http\\Client\\Request;\n\n$body = new http\\Message\\Body;\n$body->append('{\"versionCodes\":[\"string\"],\"status\":\"draft\",\"userFraction\":0,\"name\":\"string\",\"releaseNotes\":[{\"language\":\"string\",\"text\":\"string\"}]}');\n\n$request->setRequestUrl('https://api.appskyline.com/api/apps/%7BappId%7D/google-play/release/plan');\n$request->setRequestMethod('POST');\n$request->setBody($body);\n\n$request->setQuery(new http\\QueryString([\n  'track' => 'SOME_STRING_VALUE'\n]));\n\n$request->setHeaders([\n  'content-type' => 'application/json',\n  'Authorization' => 'Basic REPLACE_BASIC_AUTH'\n]);\n\n$client->enqueue($request)->send();\n$response = $client->getResponse();\n\necho $response->getBody();"}]}},"/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"}}],"responses":{"200":{"description":"Operation result; includes appId and packageName. Commit is not proof of publication.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid input or Google API error; details retain upstream status and review action"},"401":{"description":"Authentication required"},"403":{"description":"Insufficient scope, app binding, or administrator role"},"404":{"description":"App not found in the authenticated organization"}},"x-codeSamples":[{"lang":"Node + Request","source":"const request = require('request');\n\nconst options = {\n  method: 'POST',\n  url: 'https://api.appskyline.com/api/apps/%7BappId%7D/google-play/edits',\n  headers: {Authorization: 'Basic REPLACE_BASIC_AUTH'}\n};\n\nrequest(options, function (error, response, body) {\n  if (error) throw new Error(error);\n\n  console.log(body);\n});\n"},{"lang":"Shell + Curl","source":"curl --request POST \\\n  --url https://api.appskyline.com/api/apps/%7BappId%7D/google-play/edits \\\n  --header 'Authorization: Basic REPLACE_BASIC_AUTH'"},{"lang":"Shell + Httpie","source":"http POST https://api.appskyline.com/api/apps/%7BappId%7D/google-play/edits \\\n  Authorization:'Basic REPLACE_BASIC_AUTH'"},{"lang":"Python + Python3","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"api.appskyline.com\")\n\nheaders = { 'Authorization': \"Basic REPLACE_BASIC_AUTH\" }\n\nconn.request(\"POST\", \"/api/apps/%7BappId%7D/google-play/edits\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"},{"lang":"Php + Curl","source":"<?php\n\n$curl = curl_init();\n\ncurl_setopt_array($curl, [\n  CURLOPT_URL => \"https://api.appskyline.com/api/apps/%7BappId%7D/google-play/edits\",\n  CURLOPT_RETURNTRANSFER => true,\n  CURLOPT_ENCODING => \"\",\n  CURLOPT_MAXREDIRS => 10,\n  CURLOPT_TIMEOUT => 30,\n  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,\n  CURLOPT_CUSTOMREQUEST => \"POST\",\n  CURLOPT_HTTPHEADER => [\n    \"Authorization: Basic REPLACE_BASIC_AUTH\"\n  ],\n]);\n\n$response = curl_exec($curl);\n$err = curl_error($curl);\n\ncurl_close($curl);\n\nif ($err) {\n  echo \"cURL Error #:\" . $err;\n} else {\n  echo $response;\n}"},{"lang":"Php + Http1","source":"<?php\n\n$request = new HttpRequest();\n$request->setUrl('https://api.appskyline.com/api/apps/%7BappId%7D/google-play/edits');\n$request->setMethod(HTTP_METH_POST);\n\n$request->setHeaders([\n  'Authorization' => 'Basic REPLACE_BASIC_AUTH'\n]);\n\ntry {\n  $response = $request->send();\n\n  echo $response->getBody();\n} catch (HttpException $ex) {\n  echo $ex;\n}"},{"lang":"Php + Http2","source":"<?php\n\n$client = new http\\Client;\n$request = new http\\Client\\Request;\n\n$request->setRequestUrl('https://api.appskyline.com/api/apps/%7BappId%7D/google-play/edits');\n$request->setRequestMethod('POST');\n$request->setHeaders([\n  'Authorization' => 'Basic REPLACE_BASIC_AUTH'\n]);\n\n$client->enqueue($request)->send();\n$response = $client->getResponse();\n\necho $response->getBody();"}]}},"/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"}}],"responses":{"200":{"description":"Operation result; includes appId and packageName. Commit is not proof of publication.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid input or Google API error; details retain upstream status and review action"},"401":{"description":"Authentication required"},"403":{"description":"Insufficient scope, app binding, or administrator role"},"404":{"description":"App not found in the authenticated organization"}},"x-codeSamples":[{"lang":"Node + Request","source":"const request = require('request');\n\nconst options = {\n  method: 'GET',\n  url: 'https://api.appskyline.com/api/apps/%7BappId%7D/google-play/edits/%7BeditId%7D',\n  headers: {Authorization: 'Basic REPLACE_BASIC_AUTH'}\n};\n\nrequest(options, function (error, response, body) {\n  if (error) throw new Error(error);\n\n  console.log(body);\n});\n"},{"lang":"Shell + Curl","source":"curl --request GET \\\n  --url https://api.appskyline.com/api/apps/%7BappId%7D/google-play/edits/%7BeditId%7D \\\n  --header 'Authorization: Basic REPLACE_BASIC_AUTH'"},{"lang":"Shell + Httpie","source":"http GET https://api.appskyline.com/api/apps/%7BappId%7D/google-play/edits/%7BeditId%7D \\\n  Authorization:'Basic REPLACE_BASIC_AUTH'"},{"lang":"Python + Python3","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"api.appskyline.com\")\n\nheaders = { 'Authorization': \"Basic REPLACE_BASIC_AUTH\" }\n\nconn.request(\"GET\", \"/api/apps/%7BappId%7D/google-play/edits/%7BeditId%7D\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"},{"lang":"Php + Curl","source":"<?php\n\n$curl = curl_init();\n\ncurl_setopt_array($curl, [\n  CURLOPT_URL => \"https://api.appskyline.com/api/apps/%7BappId%7D/google-play/edits/%7BeditId%7D\",\n  CURLOPT_RETURNTRANSFER => true,\n  CURLOPT_ENCODING => \"\",\n  CURLOPT_MAXREDIRS => 10,\n  CURLOPT_TIMEOUT => 30,\n  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,\n  CURLOPT_CUSTOMREQUEST => \"GET\",\n  CURLOPT_HTTPHEADER => [\n    \"Authorization: Basic REPLACE_BASIC_AUTH\"\n  ],\n]);\n\n$response = curl_exec($curl);\n$err = curl_error($curl);\n\ncurl_close($curl);\n\nif ($err) {\n  echo \"cURL Error #:\" . $err;\n} else {\n  echo $response;\n}"},{"lang":"Php + Http1","source":"<?php\n\n$request = new HttpRequest();\n$request->setUrl('https://api.appskyline.com/api/apps/%7BappId%7D/google-play/edits/%7BeditId%7D');\n$request->setMethod(HTTP_METH_GET);\n\n$request->setHeaders([\n  'Authorization' => 'Basic REPLACE_BASIC_AUTH'\n]);\n\ntry {\n  $response = $request->send();\n\n  echo $response->getBody();\n} catch (HttpException $ex) {\n  echo $ex;\n}"},{"lang":"Php + Http2","source":"<?php\n\n$client = new http\\Client;\n$request = new http\\Client\\Request;\n\n$request->setRequestUrl('https://api.appskyline.com/api/apps/%7BappId%7D/google-play/edits/%7BeditId%7D');\n$request->setRequestMethod('GET');\n$request->setHeaders([\n  'Authorization' => 'Basic REPLACE_BASIC_AUTH'\n]);\n\n$client->enqueue($request)->send();\n$response = $client->getResponse();\n\necho $response->getBody();"}]},"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"}}],"responses":{"200":{"description":"Operation result; includes appId and packageName. Commit is not proof of publication.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid input or Google API error; details retain upstream status and review action"},"401":{"description":"Authentication required"},"403":{"description":"Insufficient scope, app binding, or administrator role"},"404":{"description":"App not found in the authenticated organization"}},"x-codeSamples":[{"lang":"Node + Request","source":"const request = require('request');\n\nconst options = {\n  method: 'DELETE',\n  url: 'https://api.appskyline.com/api/apps/%7BappId%7D/google-play/edits/%7BeditId%7D',\n  headers: {Authorization: 'Basic REPLACE_BASIC_AUTH'}\n};\n\nrequest(options, function (error, response, body) {\n  if (error) throw new Error(error);\n\n  console.log(body);\n});\n"},{"lang":"Shell + Curl","source":"curl --request DELETE \\\n  --url https://api.appskyline.com/api/apps/%7BappId%7D/google-play/edits/%7BeditId%7D \\\n  --header 'Authorization: Basic REPLACE_BASIC_AUTH'"},{"lang":"Shell + Httpie","source":"http DELETE https://api.appskyline.com/api/apps/%7BappId%7D/google-play/edits/%7BeditId%7D \\\n  Authorization:'Basic REPLACE_BASIC_AUTH'"},{"lang":"Python + Python3","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"api.appskyline.com\")\n\nheaders = { 'Authorization': \"Basic REPLACE_BASIC_AUTH\" }\n\nconn.request(\"DELETE\", \"/api/apps/%7BappId%7D/google-play/edits/%7BeditId%7D\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"},{"lang":"Php + Curl","source":"<?php\n\n$curl = curl_init();\n\ncurl_setopt_array($curl, [\n  CURLOPT_URL => \"https://api.appskyline.com/api/apps/%7BappId%7D/google-play/edits/%7BeditId%7D\",\n  CURLOPT_RETURNTRANSFER => true,\n  CURLOPT_ENCODING => \"\",\n  CURLOPT_MAXREDIRS => 10,\n  CURLOPT_TIMEOUT => 30,\n  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,\n  CURLOPT_CUSTOMREQUEST => \"DELETE\",\n  CURLOPT_HTTPHEADER => [\n    \"Authorization: Basic REPLACE_BASIC_AUTH\"\n  ],\n]);\n\n$response = curl_exec($curl);\n$err = curl_error($curl);\n\ncurl_close($curl);\n\nif ($err) {\n  echo \"cURL Error #:\" . $err;\n} else {\n  echo $response;\n}"},{"lang":"Php + Http1","source":"<?php\n\n$request = new HttpRequest();\n$request->setUrl('https://api.appskyline.com/api/apps/%7BappId%7D/google-play/edits/%7BeditId%7D');\n$request->setMethod(HTTP_METH_DELETE);\n\n$request->setHeaders([\n  'Authorization' => 'Basic REPLACE_BASIC_AUTH'\n]);\n\ntry {\n  $response = $request->send();\n\n  echo $response->getBody();\n} catch (HttpException $ex) {\n  echo $ex;\n}"},{"lang":"Php + Http2","source":"<?php\n\n$client = new http\\Client;\n$request = new http\\Client\\Request;\n\n$request->setRequestUrl('https://api.appskyline.com/api/apps/%7BappId%7D/google-play/edits/%7BeditId%7D');\n$request->setRequestMethod('DELETE');\n$request->setHeaders([\n  'Authorization' => 'Basic REPLACE_BASIC_AUTH'\n]);\n\n$client->enqueue($request)->send();\n$response = $client->getResponse();\n\necho $response->getBody();"}]}},"/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"}}],"responses":{"200":{"description":"Operation result; includes appId and packageName. Commit is not proof of publication.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid input or Google API error; details retain upstream status and review action"},"401":{"description":"Authentication required"},"403":{"description":"Insufficient scope, app binding, or administrator role"},"404":{"description":"App not found in the authenticated organization"}},"x-codeSamples":[{"lang":"Node + Request","source":"const request = require('request');\n\nconst options = {\n  method: 'POST',\n  url: 'https://api.appskyline.com/api/apps/%7BappId%7D/google-play/edits/%7BeditId%7D/validate',\n  headers: {Authorization: 'Basic REPLACE_BASIC_AUTH'}\n};\n\nrequest(options, function (error, response, body) {\n  if (error) throw new Error(error);\n\n  console.log(body);\n});\n"},{"lang":"Shell + Curl","source":"curl --request POST \\\n  --url https://api.appskyline.com/api/apps/%7BappId%7D/google-play/edits/%7BeditId%7D/validate \\\n  --header 'Authorization: Basic REPLACE_BASIC_AUTH'"},{"lang":"Shell + Httpie","source":"http POST https://api.appskyline.com/api/apps/%7BappId%7D/google-play/edits/%7BeditId%7D/validate \\\n  Authorization:'Basic REPLACE_BASIC_AUTH'"},{"lang":"Python + Python3","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"api.appskyline.com\")\n\nheaders = { 'Authorization': \"Basic REPLACE_BASIC_AUTH\" }\n\nconn.request(\"POST\", \"/api/apps/%7BappId%7D/google-play/edits/%7BeditId%7D/validate\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"},{"lang":"Php + Curl","source":"<?php\n\n$curl = curl_init();\n\ncurl_setopt_array($curl, [\n  CURLOPT_URL => \"https://api.appskyline.com/api/apps/%7BappId%7D/google-play/edits/%7BeditId%7D/validate\",\n  CURLOPT_RETURNTRANSFER => true,\n  CURLOPT_ENCODING => \"\",\n  CURLOPT_MAXREDIRS => 10,\n  CURLOPT_TIMEOUT => 30,\n  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,\n  CURLOPT_CUSTOMREQUEST => \"POST\",\n  CURLOPT_HTTPHEADER => [\n    \"Authorization: Basic REPLACE_BASIC_AUTH\"\n  ],\n]);\n\n$response = curl_exec($curl);\n$err = curl_error($curl);\n\ncurl_close($curl);\n\nif ($err) {\n  echo \"cURL Error #:\" . $err;\n} else {\n  echo $response;\n}"},{"lang":"Php + Http1","source":"<?php\n\n$request = new HttpRequest();\n$request->setUrl('https://api.appskyline.com/api/apps/%7BappId%7D/google-play/edits/%7BeditId%7D/validate');\n$request->setMethod(HTTP_METH_POST);\n\n$request->setHeaders([\n  'Authorization' => 'Basic REPLACE_BASIC_AUTH'\n]);\n\ntry {\n  $response = $request->send();\n\n  echo $response->getBody();\n} catch (HttpException $ex) {\n  echo $ex;\n}"},{"lang":"Php + Http2","source":"<?php\n\n$client = new http\\Client;\n$request = new http\\Client\\Request;\n\n$request->setRequestUrl('https://api.appskyline.com/api/apps/%7BappId%7D/google-play/edits/%7BeditId%7D/validate');\n$request->setRequestMethod('POST');\n$request->setHeaders([\n  'Authorization' => 'Basic REPLACE_BASIC_AUTH'\n]);\n\n$client->enqueue($request)->send();\n$response = $client->getResponse();\n\necho $response->getBody();"}]}},"/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"}}],"responses":{"200":{"description":"Operation result; includes appId and packageName. Commit is not proof of publication.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid input or Google API error; details retain upstream status and review action"},"401":{"description":"Authentication required"},"403":{"description":"Insufficient scope, app binding, or administrator role"},"404":{"description":"App not found in the authenticated organization"}},"x-codeSamples":[{"lang":"Node + Request","source":"const request = require('request');\n\nconst options = {\n  method: 'GET',\n  url: 'https://api.appskyline.com/api/apps/%7BappId%7D/google-play/edits/%7BeditId%7D/bundles',\n  headers: {Authorization: 'Basic REPLACE_BASIC_AUTH'}\n};\n\nrequest(options, function (error, response, body) {\n  if (error) throw new Error(error);\n\n  console.log(body);\n});\n"},{"lang":"Shell + Curl","source":"curl --request GET \\\n  --url https://api.appskyline.com/api/apps/%7BappId%7D/google-play/edits/%7BeditId%7D/bundles \\\n  --header 'Authorization: Basic REPLACE_BASIC_AUTH'"},{"lang":"Shell + Httpie","source":"http GET https://api.appskyline.com/api/apps/%7BappId%7D/google-play/edits/%7BeditId%7D/bundles \\\n  Authorization:'Basic REPLACE_BASIC_AUTH'"},{"lang":"Python + Python3","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"api.appskyline.com\")\n\nheaders = { 'Authorization': \"Basic REPLACE_BASIC_AUTH\" }\n\nconn.request(\"GET\", \"/api/apps/%7BappId%7D/google-play/edits/%7BeditId%7D/bundles\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"},{"lang":"Php + Curl","source":"<?php\n\n$curl = curl_init();\n\ncurl_setopt_array($curl, [\n  CURLOPT_URL => \"https://api.appskyline.com/api/apps/%7BappId%7D/google-play/edits/%7BeditId%7D/bundles\",\n  CURLOPT_RETURNTRANSFER => true,\n  CURLOPT_ENCODING => \"\",\n  CURLOPT_MAXREDIRS => 10,\n  CURLOPT_TIMEOUT => 30,\n  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,\n  CURLOPT_CUSTOMREQUEST => \"GET\",\n  CURLOPT_HTTPHEADER => [\n    \"Authorization: Basic REPLACE_BASIC_AUTH\"\n  ],\n]);\n\n$response = curl_exec($curl);\n$err = curl_error($curl);\n\ncurl_close($curl);\n\nif ($err) {\n  echo \"cURL Error #:\" . $err;\n} else {\n  echo $response;\n}"},{"lang":"Php + Http1","source":"<?php\n\n$request = new HttpRequest();\n$request->setUrl('https://api.appskyline.com/api/apps/%7BappId%7D/google-play/edits/%7BeditId%7D/bundles');\n$request->setMethod(HTTP_METH_GET);\n\n$request->setHeaders([\n  'Authorization' => 'Basic REPLACE_BASIC_AUTH'\n]);\n\ntry {\n  $response = $request->send();\n\n  echo $response->getBody();\n} catch (HttpException $ex) {\n  echo $ex;\n}"},{"lang":"Php + Http2","source":"<?php\n\n$client = new http\\Client;\n$request = new http\\Client\\Request;\n\n$request->setRequestUrl('https://api.appskyline.com/api/apps/%7BappId%7D/google-play/edits/%7BeditId%7D/bundles');\n$request->setRequestMethod('GET');\n$request->setHeaders([\n  'Authorization' => 'Basic REPLACE_BASIC_AUTH'\n]);\n\n$client->enqueue($request)->send();\n$response = $client->getResponse();\n\necho $response->getBody();"}]}},"/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"}}],"responses":{"200":{"description":"Operation result; includes appId and packageName. Commit is not proof of publication.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid input or Google API error; details retain upstream status and review action"},"401":{"description":"Authentication required"},"403":{"description":"Insufficient scope, app binding, or administrator role"},"404":{"description":"App not found in the authenticated organization"}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["size"],"properties":{"size":{"type":"integer","minimum":1,"maximum":2147483648}}}}}},"x-codeSamples":[{"lang":"Node + Request","source":"const request = require('request');\n\nconst options = {\n  method: 'POST',\n  url: 'https://api.appskyline.com/api/apps/%7BappId%7D/google-play/edits/%7BeditId%7D/bundle-upload',\n  headers: {'content-type': 'application/json', Authorization: 'Basic REPLACE_BASIC_AUTH'},\n  body: {size: 1},\n  json: true\n};\n\nrequest(options, function (error, response, body) {\n  if (error) throw new Error(error);\n\n  console.log(body);\n});\n"},{"lang":"Shell + Curl","source":"curl --request POST \\\n  --url https://api.appskyline.com/api/apps/%7BappId%7D/google-play/edits/%7BeditId%7D/bundle-upload \\\n  --header 'Authorization: Basic REPLACE_BASIC_AUTH' \\\n  --header 'content-type: application/json' \\\n  --data '{\"size\":1}'"},{"lang":"Shell + Httpie","source":"echo '{\"size\":1}' |  \\\n  http POST https://api.appskyline.com/api/apps/%7BappId%7D/google-play/edits/%7BeditId%7D/bundle-upload \\\n  Authorization:'Basic REPLACE_BASIC_AUTH' \\\n  content-type:application/json"},{"lang":"Python + Python3","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"api.appskyline.com\")\n\npayload = \"{\\\"size\\\":1}\"\n\nheaders = {\n    'content-type': \"application/json\",\n    'Authorization': \"Basic REPLACE_BASIC_AUTH\"\n    }\n\nconn.request(\"POST\", \"/api/apps/%7BappId%7D/google-play/edits/%7BeditId%7D/bundle-upload\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"},{"lang":"Php + Curl","source":"<?php\n\n$curl = curl_init();\n\ncurl_setopt_array($curl, [\n  CURLOPT_URL => \"https://api.appskyline.com/api/apps/%7BappId%7D/google-play/edits/%7BeditId%7D/bundle-upload\",\n  CURLOPT_RETURNTRANSFER => true,\n  CURLOPT_ENCODING => \"\",\n  CURLOPT_MAXREDIRS => 10,\n  CURLOPT_TIMEOUT => 30,\n  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,\n  CURLOPT_CUSTOMREQUEST => \"POST\",\n  CURLOPT_POSTFIELDS => \"{\\\"size\\\":1}\",\n  CURLOPT_HTTPHEADER => [\n    \"Authorization: Basic REPLACE_BASIC_AUTH\",\n    \"content-type: application/json\"\n  ],\n]);\n\n$response = curl_exec($curl);\n$err = curl_error($curl);\n\ncurl_close($curl);\n\nif ($err) {\n  echo \"cURL Error #:\" . $err;\n} else {\n  echo $response;\n}"},{"lang":"Php + Http1","source":"<?php\n\n$request = new HttpRequest();\n$request->setUrl('https://api.appskyline.com/api/apps/%7BappId%7D/google-play/edits/%7BeditId%7D/bundle-upload');\n$request->setMethod(HTTP_METH_POST);\n\n$request->setHeaders([\n  'content-type' => 'application/json',\n  'Authorization' => 'Basic REPLACE_BASIC_AUTH'\n]);\n\n$request->setBody('{\"size\":1}');\n\ntry {\n  $response = $request->send();\n\n  echo $response->getBody();\n} catch (HttpException $ex) {\n  echo $ex;\n}"},{"lang":"Php + Http2","source":"<?php\n\n$client = new http\\Client;\n$request = new http\\Client\\Request;\n\n$body = new http\\Message\\Body;\n$body->append('{\"size\":1}');\n\n$request->setRequestUrl('https://api.appskyline.com/api/apps/%7BappId%7D/google-play/edits/%7BeditId%7D/bundle-upload');\n$request->setRequestMethod('POST');\n$request->setBody($body);\n\n$request->setHeaders([\n  'content-type' => 'application/json',\n  'Authorization' => 'Basic REPLACE_BASIC_AUTH'\n]);\n\n$client->enqueue($request)->send();\n$response = $client->getResponse();\n\necho $response->getBody();"}]}},"/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"}}],"responses":{"200":{"description":"Operation result; includes appId and packageName. Commit is not proof of publication.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid input or Google API error; details retain upstream status and review action"},"401":{"description":"Authentication required"},"403":{"description":"Insufficient scope, app binding, or administrator role"},"404":{"description":"App not found in the authenticated organization"}},"x-codeSamples":[{"lang":"Node + Request","source":"const request = require('request');\n\nconst options = {\n  method: 'GET',\n  url: 'https://api.appskyline.com/api/apps/%7BappId%7D/google-play/edits/%7BeditId%7D/listings',\n  headers: {Authorization: 'Basic REPLACE_BASIC_AUTH'}\n};\n\nrequest(options, function (error, response, body) {\n  if (error) throw new Error(error);\n\n  console.log(body);\n});\n"},{"lang":"Shell + Curl","source":"curl --request GET \\\n  --url https://api.appskyline.com/api/apps/%7BappId%7D/google-play/edits/%7BeditId%7D/listings \\\n  --header 'Authorization: Basic REPLACE_BASIC_AUTH'"},{"lang":"Shell + Httpie","source":"http GET https://api.appskyline.com/api/apps/%7BappId%7D/google-play/edits/%7BeditId%7D/listings \\\n  Authorization:'Basic REPLACE_BASIC_AUTH'"},{"lang":"Python + Python3","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"api.appskyline.com\")\n\nheaders = { 'Authorization': \"Basic REPLACE_BASIC_AUTH\" }\n\nconn.request(\"GET\", \"/api/apps/%7BappId%7D/google-play/edits/%7BeditId%7D/listings\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"},{"lang":"Php + Curl","source":"<?php\n\n$curl = curl_init();\n\ncurl_setopt_array($curl, [\n  CURLOPT_URL => \"https://api.appskyline.com/api/apps/%7BappId%7D/google-play/edits/%7BeditId%7D/listings\",\n  CURLOPT_RETURNTRANSFER => true,\n  CURLOPT_ENCODING => \"\",\n  CURLOPT_MAXREDIRS => 10,\n  CURLOPT_TIMEOUT => 30,\n  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,\n  CURLOPT_CUSTOMREQUEST => \"GET\",\n  CURLOPT_HTTPHEADER => [\n    \"Authorization: Basic REPLACE_BASIC_AUTH\"\n  ],\n]);\n\n$response = curl_exec($curl);\n$err = curl_error($curl);\n\ncurl_close($curl);\n\nif ($err) {\n  echo \"cURL Error #:\" . $err;\n} else {\n  echo $response;\n}"},{"lang":"Php + Http1","source":"<?php\n\n$request = new HttpRequest();\n$request->setUrl('https://api.appskyline.com/api/apps/%7BappId%7D/google-play/edits/%7BeditId%7D/listings');\n$request->setMethod(HTTP_METH_GET);\n\n$request->setHeaders([\n  'Authorization' => 'Basic REPLACE_BASIC_AUTH'\n]);\n\ntry {\n  $response = $request->send();\n\n  echo $response->getBody();\n} catch (HttpException $ex) {\n  echo $ex;\n}"},{"lang":"Php + Http2","source":"<?php\n\n$client = new http\\Client;\n$request = new http\\Client\\Request;\n\n$request->setRequestUrl('https://api.appskyline.com/api/apps/%7BappId%7D/google-play/edits/%7BeditId%7D/listings');\n$request->setRequestMethod('GET');\n$request->setHeaders([\n  'Authorization' => 'Basic REPLACE_BASIC_AUTH'\n]);\n\n$client->enqueue($request)->send();\n$response = $client->getResponse();\n\necho $response->getBody();"}]},"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"}}],"responses":{"200":{"description":"Operation result; includes appId and packageName. Commit is not proof of publication.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid input or Google API error; details retain upstream status and review action"},"401":{"description":"Authentication required"},"403":{"description":"Insufficient scope, app binding, or administrator role"},"404":{"description":"App not found in the authenticated organization"}},"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"}}}}}}}}},"x-codeSamples":[{"lang":"Node + Request","source":"const request = require('request');\n\nconst options = {\n  method: 'PUT',\n  url: 'https://api.appskyline.com/api/apps/%7BappId%7D/google-play/edits/%7BeditId%7D/listings',\n  headers: {'content-type': 'application/json', Authorization: 'Basic REPLACE_BASIC_AUTH'},\n  body: {\n    locales: [\n      {\n        language: 'string',\n        title: 'string',\n        shortDescription: 'string',\n        fullDescription: 'string',\n        video: 'string'\n      }\n    ]\n  },\n  json: true\n};\n\nrequest(options, function (error, response, body) {\n  if (error) throw new Error(error);\n\n  console.log(body);\n});\n"},{"lang":"Shell + Curl","source":"curl --request PUT \\\n  --url https://api.appskyline.com/api/apps/%7BappId%7D/google-play/edits/%7BeditId%7D/listings \\\n  --header 'Authorization: Basic REPLACE_BASIC_AUTH' \\\n  --header 'content-type: application/json' \\\n  --data '{\"locales\":[{\"language\":\"string\",\"title\":\"string\",\"shortDescription\":\"string\",\"fullDescription\":\"string\",\"video\":\"string\"}]}'"},{"lang":"Shell + Httpie","source":"echo '{\"locales\":[{\"language\":\"string\",\"title\":\"string\",\"shortDescription\":\"string\",\"fullDescription\":\"string\",\"video\":\"string\"}]}' |  \\\n  http PUT https://api.appskyline.com/api/apps/%7BappId%7D/google-play/edits/%7BeditId%7D/listings \\\n  Authorization:'Basic REPLACE_BASIC_AUTH' \\\n  content-type:application/json"},{"lang":"Python + Python3","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"api.appskyline.com\")\n\npayload = \"{\\\"locales\\\":[{\\\"language\\\":\\\"string\\\",\\\"title\\\":\\\"string\\\",\\\"shortDescription\\\":\\\"string\\\",\\\"fullDescription\\\":\\\"string\\\",\\\"video\\\":\\\"string\\\"}]}\"\n\nheaders = {\n    'content-type': \"application/json\",\n    'Authorization': \"Basic REPLACE_BASIC_AUTH\"\n    }\n\nconn.request(\"PUT\", \"/api/apps/%7BappId%7D/google-play/edits/%7BeditId%7D/listings\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"},{"lang":"Php + Curl","source":"<?php\n\n$curl = curl_init();\n\ncurl_setopt_array($curl, [\n  CURLOPT_URL => \"https://api.appskyline.com/api/apps/%7BappId%7D/google-play/edits/%7BeditId%7D/listings\",\n  CURLOPT_RETURNTRANSFER => true,\n  CURLOPT_ENCODING => \"\",\n  CURLOPT_MAXREDIRS => 10,\n  CURLOPT_TIMEOUT => 30,\n  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,\n  CURLOPT_CUSTOMREQUEST => \"PUT\",\n  CURLOPT_POSTFIELDS => \"{\\\"locales\\\":[{\\\"language\\\":\\\"string\\\",\\\"title\\\":\\\"string\\\",\\\"shortDescription\\\":\\\"string\\\",\\\"fullDescription\\\":\\\"string\\\",\\\"video\\\":\\\"string\\\"}]}\",\n  CURLOPT_HTTPHEADER => [\n    \"Authorization: Basic REPLACE_BASIC_AUTH\",\n    \"content-type: application/json\"\n  ],\n]);\n\n$response = curl_exec($curl);\n$err = curl_error($curl);\n\ncurl_close($curl);\n\nif ($err) {\n  echo \"cURL Error #:\" . $err;\n} else {\n  echo $response;\n}"},{"lang":"Php + Http1","source":"<?php\n\n$request = new HttpRequest();\n$request->setUrl('https://api.appskyline.com/api/apps/%7BappId%7D/google-play/edits/%7BeditId%7D/listings');\n$request->setMethod(HTTP_METH_PUT);\n\n$request->setHeaders([\n  'content-type' => 'application/json',\n  'Authorization' => 'Basic REPLACE_BASIC_AUTH'\n]);\n\n$request->setBody('{\"locales\":[{\"language\":\"string\",\"title\":\"string\",\"shortDescription\":\"string\",\"fullDescription\":\"string\",\"video\":\"string\"}]}');\n\ntry {\n  $response = $request->send();\n\n  echo $response->getBody();\n} catch (HttpException $ex) {\n  echo $ex;\n}"},{"lang":"Php + Http2","source":"<?php\n\n$client = new http\\Client;\n$request = new http\\Client\\Request;\n\n$body = new http\\Message\\Body;\n$body->append('{\"locales\":[{\"language\":\"string\",\"title\":\"string\",\"shortDescription\":\"string\",\"fullDescription\":\"string\",\"video\":\"string\"}]}');\n\n$request->setRequestUrl('https://api.appskyline.com/api/apps/%7BappId%7D/google-play/edits/%7BeditId%7D/listings');\n$request->setRequestMethod('PUT');\n$request->setBody($body);\n\n$request->setHeaders([\n  'content-type' => 'application/json',\n  'Authorization' => 'Basic REPLACE_BASIC_AUTH'\n]);\n\n$client->enqueue($request)->send();\n$response = $client->getResponse();\n\necho $response->getBody();"}]}},"/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"}}],"responses":{"200":{"description":"Operation result; includes appId and packageName. Commit is not proof of publication.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid input or Google API error; details retain upstream status and review action"},"401":{"description":"Authentication required"},"403":{"description":"Insufficient scope, app binding, or administrator role"},"404":{"description":"App not found in the authenticated organization"}},"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}}}}}}}}},"x-codeSamples":[{"lang":"Node + Request","source":"const request = require('request');\n\nconst options = {\n  method: 'PUT',\n  url: 'https://api.appskyline.com/api/apps/%7BappId%7D/google-play/edits/%7BeditId%7D/tracks/%7Btrack%7D',\n  headers: {'content-type': 'application/json', Authorization: 'Basic REPLACE_BASIC_AUTH'},\n  body: {\n    versionCodes: ['string'],\n    status: 'draft',\n    userFraction: 0,\n    name: 'string',\n    releaseNotes: [{language: 'string', text: 'string'}]\n  },\n  json: true\n};\n\nrequest(options, function (error, response, body) {\n  if (error) throw new Error(error);\n\n  console.log(body);\n});\n"},{"lang":"Shell + Curl","source":"curl --request PUT \\\n  --url https://api.appskyline.com/api/apps/%7BappId%7D/google-play/edits/%7BeditId%7D/tracks/%7Btrack%7D \\\n  --header 'Authorization: Basic REPLACE_BASIC_AUTH' \\\n  --header 'content-type: application/json' \\\n  --data '{\"versionCodes\":[\"string\"],\"status\":\"draft\",\"userFraction\":0,\"name\":\"string\",\"releaseNotes\":[{\"language\":\"string\",\"text\":\"string\"}]}'"},{"lang":"Shell + Httpie","source":"echo '{\"versionCodes\":[\"string\"],\"status\":\"draft\",\"userFraction\":0,\"name\":\"string\",\"releaseNotes\":[{\"language\":\"string\",\"text\":\"string\"}]}' |  \\\n  http PUT https://api.appskyline.com/api/apps/%7BappId%7D/google-play/edits/%7BeditId%7D/tracks/%7Btrack%7D \\\n  Authorization:'Basic REPLACE_BASIC_AUTH' \\\n  content-type:application/json"},{"lang":"Python + Python3","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"api.appskyline.com\")\n\npayload = \"{\\\"versionCodes\\\":[\\\"string\\\"],\\\"status\\\":\\\"draft\\\",\\\"userFraction\\\":0,\\\"name\\\":\\\"string\\\",\\\"releaseNotes\\\":[{\\\"language\\\":\\\"string\\\",\\\"text\\\":\\\"string\\\"}]}\"\n\nheaders = {\n    'content-type': \"application/json\",\n    'Authorization': \"Basic REPLACE_BASIC_AUTH\"\n    }\n\nconn.request(\"PUT\", \"/api/apps/%7BappId%7D/google-play/edits/%7BeditId%7D/tracks/%7Btrack%7D\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"},{"lang":"Php + Curl","source":"<?php\n\n$curl = curl_init();\n\ncurl_setopt_array($curl, [\n  CURLOPT_URL => \"https://api.appskyline.com/api/apps/%7BappId%7D/google-play/edits/%7BeditId%7D/tracks/%7Btrack%7D\",\n  CURLOPT_RETURNTRANSFER => true,\n  CURLOPT_ENCODING => \"\",\n  CURLOPT_MAXREDIRS => 10,\n  CURLOPT_TIMEOUT => 30,\n  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,\n  CURLOPT_CUSTOMREQUEST => \"PUT\",\n  CURLOPT_POSTFIELDS => \"{\\\"versionCodes\\\":[\\\"string\\\"],\\\"status\\\":\\\"draft\\\",\\\"userFraction\\\":0,\\\"name\\\":\\\"string\\\",\\\"releaseNotes\\\":[{\\\"language\\\":\\\"string\\\",\\\"text\\\":\\\"string\\\"}]}\",\n  CURLOPT_HTTPHEADER => [\n    \"Authorization: Basic REPLACE_BASIC_AUTH\",\n    \"content-type: application/json\"\n  ],\n]);\n\n$response = curl_exec($curl);\n$err = curl_error($curl);\n\ncurl_close($curl);\n\nif ($err) {\n  echo \"cURL Error #:\" . $err;\n} else {\n  echo $response;\n}"},{"lang":"Php + Http1","source":"<?php\n\n$request = new HttpRequest();\n$request->setUrl('https://api.appskyline.com/api/apps/%7BappId%7D/google-play/edits/%7BeditId%7D/tracks/%7Btrack%7D');\n$request->setMethod(HTTP_METH_PUT);\n\n$request->setHeaders([\n  'content-type' => 'application/json',\n  'Authorization' => 'Basic REPLACE_BASIC_AUTH'\n]);\n\n$request->setBody('{\"versionCodes\":[\"string\"],\"status\":\"draft\",\"userFraction\":0,\"name\":\"string\",\"releaseNotes\":[{\"language\":\"string\",\"text\":\"string\"}]}');\n\ntry {\n  $response = $request->send();\n\n  echo $response->getBody();\n} catch (HttpException $ex) {\n  echo $ex;\n}"},{"lang":"Php + Http2","source":"<?php\n\n$client = new http\\Client;\n$request = new http\\Client\\Request;\n\n$body = new http\\Message\\Body;\n$body->append('{\"versionCodes\":[\"string\"],\"status\":\"draft\",\"userFraction\":0,\"name\":\"string\",\"releaseNotes\":[{\"language\":\"string\",\"text\":\"string\"}]}');\n\n$request->setRequestUrl('https://api.appskyline.com/api/apps/%7BappId%7D/google-play/edits/%7BeditId%7D/tracks/%7Btrack%7D');\n$request->setRequestMethod('PUT');\n$request->setBody($body);\n\n$request->setHeaders([\n  'content-type' => 'application/json',\n  'Authorization' => 'Basic REPLACE_BASIC_AUTH'\n]);\n\n$client->enqueue($request)->send();\n$response = $client->getResponse();\n\necho $response->getBody();"}]}},"/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"}}],"responses":{"200":{"description":"Operation result; includes appId and packageName. Commit is not proof of publication.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid input or Google API error; details retain upstream status and review action"},"401":{"description":"Authentication required"},"403":{"description":"Insufficient scope, app binding, or administrator role"},"404":{"description":"App not found in the authenticated organization"}},"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"deferReview":{"type":"boolean","default":false}}}}}},"x-codeSamples":[{"lang":"Node + Request","source":"const request = require('request');\n\nconst options = {\n  method: 'POST',\n  url: 'https://api.appskyline.com/api/apps/%7BappId%7D/google-play/edits/%7BeditId%7D/commit',\n  headers: {'content-type': 'application/json', Authorization: 'Basic REPLACE_BASIC_AUTH'},\n  body: {deferReview: false},\n  json: true\n};\n\nrequest(options, function (error, response, body) {\n  if (error) throw new Error(error);\n\n  console.log(body);\n});\n"},{"lang":"Shell + Curl","source":"curl --request POST \\\n  --url https://api.appskyline.com/api/apps/%7BappId%7D/google-play/edits/%7BeditId%7D/commit \\\n  --header 'Authorization: Basic REPLACE_BASIC_AUTH' \\\n  --header 'content-type: application/json' \\\n  --data '{\"deferReview\":false}'"},{"lang":"Shell + Httpie","source":"echo '{\"deferReview\":false}' |  \\\n  http POST https://api.appskyline.com/api/apps/%7BappId%7D/google-play/edits/%7BeditId%7D/commit \\\n  Authorization:'Basic REPLACE_BASIC_AUTH' \\\n  content-type:application/json"},{"lang":"Python + Python3","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"api.appskyline.com\")\n\npayload = \"{\\\"deferReview\\\":false}\"\n\nheaders = {\n    'content-type': \"application/json\",\n    'Authorization': \"Basic REPLACE_BASIC_AUTH\"\n    }\n\nconn.request(\"POST\", \"/api/apps/%7BappId%7D/google-play/edits/%7BeditId%7D/commit\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"},{"lang":"Php + Curl","source":"<?php\n\n$curl = curl_init();\n\ncurl_setopt_array($curl, [\n  CURLOPT_URL => \"https://api.appskyline.com/api/apps/%7BappId%7D/google-play/edits/%7BeditId%7D/commit\",\n  CURLOPT_RETURNTRANSFER => true,\n  CURLOPT_ENCODING => \"\",\n  CURLOPT_MAXREDIRS => 10,\n  CURLOPT_TIMEOUT => 30,\n  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,\n  CURLOPT_CUSTOMREQUEST => \"POST\",\n  CURLOPT_POSTFIELDS => \"{\\\"deferReview\\\":false}\",\n  CURLOPT_HTTPHEADER => [\n    \"Authorization: Basic REPLACE_BASIC_AUTH\",\n    \"content-type: application/json\"\n  ],\n]);\n\n$response = curl_exec($curl);\n$err = curl_error($curl);\n\ncurl_close($curl);\n\nif ($err) {\n  echo \"cURL Error #:\" . $err;\n} else {\n  echo $response;\n}"},{"lang":"Php + Http1","source":"<?php\n\n$request = new HttpRequest();\n$request->setUrl('https://api.appskyline.com/api/apps/%7BappId%7D/google-play/edits/%7BeditId%7D/commit');\n$request->setMethod(HTTP_METH_POST);\n\n$request->setHeaders([\n  'content-type' => 'application/json',\n  'Authorization' => 'Basic REPLACE_BASIC_AUTH'\n]);\n\n$request->setBody('{\"deferReview\":false}');\n\ntry {\n  $response = $request->send();\n\n  echo $response->getBody();\n} catch (HttpException $ex) {\n  echo $ex;\n}"},{"lang":"Php + Http2","source":"<?php\n\n$client = new http\\Client;\n$request = new http\\Client\\Request;\n\n$body = new http\\Message\\Body;\n$body->append('{\"deferReview\":false}');\n\n$request->setRequestUrl('https://api.appskyline.com/api/apps/%7BappId%7D/google-play/edits/%7BeditId%7D/commit');\n$request->setRequestMethod('POST');\n$request->setBody($body);\n\n$request->setHeaders([\n  'content-type' => 'application/json',\n  'Authorization' => 'Basic REPLACE_BASIC_AUTH'\n]);\n\n$client->enqueue($request)->send();\n$response = $client->getResponse();\n\necho $response->getBody();"}]}},"/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"}}],"responses":{"200":{"description":"Operation result; includes appId and packageName. Commit is not proof of publication.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid input or Google API error; details retain upstream status and review action"},"401":{"description":"Authentication required"},"403":{"description":"Insufficient scope, app binding, or administrator role"},"404":{"description":"App not found in the authenticated organization"}},"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"}}}}}},"x-codeSamples":[{"lang":"Node + Request","source":"const request = require('request');\n\nconst options = {\n  method: 'POST',\n  url: 'https://api.appskyline.com/api/apps/%7BappId%7D/google-play/rollout/%7Btrack%7D',\n  headers: {'content-type': 'application/json', Authorization: 'Basic REPLACE_BASIC_AUTH'},\n  body: {action: 'set', versionCode: 'string', fraction: 0},\n  json: true\n};\n\nrequest(options, function (error, response, body) {\n  if (error) throw new Error(error);\n\n  console.log(body);\n});\n"},{"lang":"Shell + Curl","source":"curl --request POST \\\n  --url https://api.appskyline.com/api/apps/%7BappId%7D/google-play/rollout/%7Btrack%7D \\\n  --header 'Authorization: Basic REPLACE_BASIC_AUTH' \\\n  --header 'content-type: application/json' \\\n  --data '{\"action\":\"set\",\"versionCode\":\"string\",\"fraction\":0}'"},{"lang":"Shell + Httpie","source":"echo '{\"action\":\"set\",\"versionCode\":\"string\",\"fraction\":0}' |  \\\n  http POST https://api.appskyline.com/api/apps/%7BappId%7D/google-play/rollout/%7Btrack%7D \\\n  Authorization:'Basic REPLACE_BASIC_AUTH' \\\n  content-type:application/json"},{"lang":"Python + Python3","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"api.appskyline.com\")\n\npayload = \"{\\\"action\\\":\\\"set\\\",\\\"versionCode\\\":\\\"string\\\",\\\"fraction\\\":0}\"\n\nheaders = {\n    'content-type': \"application/json\",\n    'Authorization': \"Basic REPLACE_BASIC_AUTH\"\n    }\n\nconn.request(\"POST\", \"/api/apps/%7BappId%7D/google-play/rollout/%7Btrack%7D\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"},{"lang":"Php + Curl","source":"<?php\n\n$curl = curl_init();\n\ncurl_setopt_array($curl, [\n  CURLOPT_URL => \"https://api.appskyline.com/api/apps/%7BappId%7D/google-play/rollout/%7Btrack%7D\",\n  CURLOPT_RETURNTRANSFER => true,\n  CURLOPT_ENCODING => \"\",\n  CURLOPT_MAXREDIRS => 10,\n  CURLOPT_TIMEOUT => 30,\n  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,\n  CURLOPT_CUSTOMREQUEST => \"POST\",\n  CURLOPT_POSTFIELDS => \"{\\\"action\\\":\\\"set\\\",\\\"versionCode\\\":\\\"string\\\",\\\"fraction\\\":0}\",\n  CURLOPT_HTTPHEADER => [\n    \"Authorization: Basic REPLACE_BASIC_AUTH\",\n    \"content-type: application/json\"\n  ],\n]);\n\n$response = curl_exec($curl);\n$err = curl_error($curl);\n\ncurl_close($curl);\n\nif ($err) {\n  echo \"cURL Error #:\" . $err;\n} else {\n  echo $response;\n}"},{"lang":"Php + Http1","source":"<?php\n\n$request = new HttpRequest();\n$request->setUrl('https://api.appskyline.com/api/apps/%7BappId%7D/google-play/rollout/%7Btrack%7D');\n$request->setMethod(HTTP_METH_POST);\n\n$request->setHeaders([\n  'content-type' => 'application/json',\n  'Authorization' => 'Basic REPLACE_BASIC_AUTH'\n]);\n\n$request->setBody('{\"action\":\"set\",\"versionCode\":\"string\",\"fraction\":0}');\n\ntry {\n  $response = $request->send();\n\n  echo $response->getBody();\n} catch (HttpException $ex) {\n  echo $ex;\n}"},{"lang":"Php + Http2","source":"<?php\n\n$client = new http\\Client;\n$request = new http\\Client\\Request;\n\n$body = new http\\Message\\Body;\n$body->append('{\"action\":\"set\",\"versionCode\":\"string\",\"fraction\":0}');\n\n$request->setRequestUrl('https://api.appskyline.com/api/apps/%7BappId%7D/google-play/rollout/%7Btrack%7D');\n$request->setRequestMethod('POST');\n$request->setBody($body);\n\n$request->setHeaders([\n  'content-type' => 'application/json',\n  'Authorization' => 'Basic REPLACE_BASIC_AUTH'\n]);\n\n$client->enqueue($request)->send();\n$response = $client->getResponse();\n\necho $response->getBody();"}]}},"/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"}}],"responses":{"200":{"description":"Operation result; includes appId and packageName. Commit is not proof of publication.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid input or Google API error; details retain upstream status and review action"},"401":{"description":"Authentication required"},"403":{"description":"Insufficient scope, app binding, or administrator role"},"404":{"description":"App not found in the authenticated organization"}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["safetyLabels"],"properties":{"safetyLabels":{"type":"string","description":"Google Data safety CSV, maximum 1 MiB"}}}}}},"x-codeSamples":[{"lang":"Node + Request","source":"const request = require('request');\n\nconst options = {\n  method: 'POST',\n  url: 'https://api.appskyline.com/api/apps/%7BappId%7D/google-play/data-safety',\n  headers: {'content-type': 'application/json', Authorization: 'Basic REPLACE_BASIC_AUTH'},\n  body: {safetyLabels: 'string'},\n  json: true\n};\n\nrequest(options, function (error, response, body) {\n  if (error) throw new Error(error);\n\n  console.log(body);\n});\n"},{"lang":"Shell + Curl","source":"curl --request POST \\\n  --url https://api.appskyline.com/api/apps/%7BappId%7D/google-play/data-safety \\\n  --header 'Authorization: Basic REPLACE_BASIC_AUTH' \\\n  --header 'content-type: application/json' \\\n  --data '{\"safetyLabels\":\"string\"}'"},{"lang":"Shell + Httpie","source":"echo '{\"safetyLabels\":\"string\"}' |  \\\n  http POST https://api.appskyline.com/api/apps/%7BappId%7D/google-play/data-safety \\\n  Authorization:'Basic REPLACE_BASIC_AUTH' \\\n  content-type:application/json"},{"lang":"Python + Python3","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"api.appskyline.com\")\n\npayload = \"{\\\"safetyLabels\\\":\\\"string\\\"}\"\n\nheaders = {\n    'content-type': \"application/json\",\n    'Authorization': \"Basic REPLACE_BASIC_AUTH\"\n    }\n\nconn.request(\"POST\", \"/api/apps/%7BappId%7D/google-play/data-safety\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"},{"lang":"Php + Curl","source":"<?php\n\n$curl = curl_init();\n\ncurl_setopt_array($curl, [\n  CURLOPT_URL => \"https://api.appskyline.com/api/apps/%7BappId%7D/google-play/data-safety\",\n  CURLOPT_RETURNTRANSFER => true,\n  CURLOPT_ENCODING => \"\",\n  CURLOPT_MAXREDIRS => 10,\n  CURLOPT_TIMEOUT => 30,\n  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,\n  CURLOPT_CUSTOMREQUEST => \"POST\",\n  CURLOPT_POSTFIELDS => \"{\\\"safetyLabels\\\":\\\"string\\\"}\",\n  CURLOPT_HTTPHEADER => [\n    \"Authorization: Basic REPLACE_BASIC_AUTH\",\n    \"content-type: application/json\"\n  ],\n]);\n\n$response = curl_exec($curl);\n$err = curl_error($curl);\n\ncurl_close($curl);\n\nif ($err) {\n  echo \"cURL Error #:\" . $err;\n} else {\n  echo $response;\n}"},{"lang":"Php + Http1","source":"<?php\n\n$request = new HttpRequest();\n$request->setUrl('https://api.appskyline.com/api/apps/%7BappId%7D/google-play/data-safety');\n$request->setMethod(HTTP_METH_POST);\n\n$request->setHeaders([\n  'content-type' => 'application/json',\n  'Authorization' => 'Basic REPLACE_BASIC_AUTH'\n]);\n\n$request->setBody('{\"safetyLabels\":\"string\"}');\n\ntry {\n  $response = $request->send();\n\n  echo $response->getBody();\n} catch (HttpException $ex) {\n  echo $ex;\n}"},{"lang":"Php + Http2","source":"<?php\n\n$client = new http\\Client;\n$request = new http\\Client\\Request;\n\n$body = new http\\Message\\Body;\n$body->append('{\"safetyLabels\":\"string\"}');\n\n$request->setRequestUrl('https://api.appskyline.com/api/apps/%7BappId%7D/google-play/data-safety');\n$request->setRequestMethod('POST');\n$request->setBody($body);\n\n$request->setHeaders([\n  'content-type' => 'application/json',\n  'Authorization' => 'Basic REPLACE_BASIC_AUTH'\n]);\n\n$client->enqueue($request)->send();\n$response = $client->getResponse();\n\necho $response->getBody();"}]}},"/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"}}],"responses":{"200":{"description":"Array of keywords, or `{items, nextCursor}` in cursor mode"},"400":{"description":"Malformed cursor, or a sort incompatible with cursor pagination"},"401":{"description":"Missing or invalid credentials"},"403":{"description":"API key is missing the `keywords:read` scope"},"429":{"description":"API key rate limit exceeded"}},"operationId":"getApiKeywords","x-codeSamples":[{"lang":"Node + Request","source":"const request = require('request');\n\nconst options = {\n  method: 'GET',\n  url: 'https://api.appskyline.com/api/keywords',\n  qs: {\n    appId: 'SOME_STRING_VALUE',\n    pagination: 'SOME_STRING_VALUE',\n    cursor: 'SOME_STRING_VALUE',\n    limit: 'SOME_INTEGER_VALUE',\n    skip: 'SOME_INTEGER_VALUE',\n    sortField: 'SOME_STRING_VALUE',\n    sortDirection: 'SOME_STRING_VALUE',\n    fields: 'SOME_STRING_VALUE'\n  },\n  headers: {Authorization: 'Basic REPLACE_BASIC_AUTH'}\n};\n\nrequest(options, function (error, response, body) {\n  if (error) throw new Error(error);\n\n  console.log(body);\n});\n"},{"lang":"Shell + Curl","source":"curl --request GET \\\n  --url 'https://api.appskyline.com/api/keywords?appId=SOME_STRING_VALUE&pagination=SOME_STRING_VALUE&cursor=SOME_STRING_VALUE&limit=SOME_INTEGER_VALUE&skip=SOME_INTEGER_VALUE&sortField=SOME_STRING_VALUE&sortDirection=SOME_STRING_VALUE&fields=SOME_STRING_VALUE' \\\n  --header 'Authorization: Basic REPLACE_BASIC_AUTH'"},{"lang":"Shell + Httpie","source":"http GET 'https://api.appskyline.com/api/keywords?appId=SOME_STRING_VALUE&pagination=SOME_STRING_VALUE&cursor=SOME_STRING_VALUE&limit=SOME_INTEGER_VALUE&skip=SOME_INTEGER_VALUE&sortField=SOME_STRING_VALUE&sortDirection=SOME_STRING_VALUE&fields=SOME_STRING_VALUE' \\\n  Authorization:'Basic REPLACE_BASIC_AUTH'"},{"lang":"Python + Python3","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"api.appskyline.com\")\n\nheaders = { 'Authorization': \"Basic REPLACE_BASIC_AUTH\" }\n\nconn.request(\"GET\", \"/api/keywords?appId=SOME_STRING_VALUE&pagination=SOME_STRING_VALUE&cursor=SOME_STRING_VALUE&limit=SOME_INTEGER_VALUE&skip=SOME_INTEGER_VALUE&sortField=SOME_STRING_VALUE&sortDirection=SOME_STRING_VALUE&fields=SOME_STRING_VALUE\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"},{"lang":"Php + Curl","source":"<?php\n\n$curl = curl_init();\n\ncurl_setopt_array($curl, [\n  CURLOPT_URL => \"https://api.appskyline.com/api/keywords?appId=SOME_STRING_VALUE&pagination=SOME_STRING_VALUE&cursor=SOME_STRING_VALUE&limit=SOME_INTEGER_VALUE&skip=SOME_INTEGER_VALUE&sortField=SOME_STRING_VALUE&sortDirection=SOME_STRING_VALUE&fields=SOME_STRING_VALUE\",\n  CURLOPT_RETURNTRANSFER => true,\n  CURLOPT_ENCODING => \"\",\n  CURLOPT_MAXREDIRS => 10,\n  CURLOPT_TIMEOUT => 30,\n  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,\n  CURLOPT_CUSTOMREQUEST => \"GET\",\n  CURLOPT_HTTPHEADER => [\n    \"Authorization: Basic REPLACE_BASIC_AUTH\"\n  ],\n]);\n\n$response = curl_exec($curl);\n$err = curl_error($curl);\n\ncurl_close($curl);\n\nif ($err) {\n  echo \"cURL Error #:\" . $err;\n} else {\n  echo $response;\n}"},{"lang":"Php + Http1","source":"<?php\n\n$request = new HttpRequest();\n$request->setUrl('https://api.appskyline.com/api/keywords');\n$request->setMethod(HTTP_METH_GET);\n\n$request->setQueryData([\n  'appId' => 'SOME_STRING_VALUE',\n  'pagination' => 'SOME_STRING_VALUE',\n  'cursor' => 'SOME_STRING_VALUE',\n  'limit' => 'SOME_INTEGER_VALUE',\n  'skip' => 'SOME_INTEGER_VALUE',\n  'sortField' => 'SOME_STRING_VALUE',\n  'sortDirection' => 'SOME_STRING_VALUE',\n  'fields' => 'SOME_STRING_VALUE'\n]);\n\n$request->setHeaders([\n  'Authorization' => 'Basic REPLACE_BASIC_AUTH'\n]);\n\ntry {\n  $response = $request->send();\n\n  echo $response->getBody();\n} catch (HttpException $ex) {\n  echo $ex;\n}"},{"lang":"Php + Http2","source":"<?php\n\n$client = new http\\Client;\n$request = new http\\Client\\Request;\n\n$request->setRequestUrl('https://api.appskyline.com/api/keywords');\n$request->setRequestMethod('GET');\n$request->setQuery(new http\\QueryString([\n  'appId' => 'SOME_STRING_VALUE',\n  'pagination' => 'SOME_STRING_VALUE',\n  'cursor' => 'SOME_STRING_VALUE',\n  'limit' => 'SOME_INTEGER_VALUE',\n  'skip' => 'SOME_INTEGER_VALUE',\n  'sortField' => 'SOME_STRING_VALUE',\n  'sortDirection' => 'SOME_STRING_VALUE',\n  'fields' => 'SOME_STRING_VALUE'\n]));\n\n$request->setHeaders([\n  'Authorization' => 'Basic REPLACE_BASIC_AUTH'\n]);\n\n$client->enqueue($request)->send();\n$response = $client->getResponse();\n\necho $response->getBody();"}]},"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"},"403":{"description":"API key is missing the `keywords:write` scope"}},"operationId":"postApiKeywords","x-codeSamples":[{"lang":"Node + Request","source":"const request = require('request');\n\nconst options = {\n  method: 'POST',\n  url: 'https://api.appskyline.com/api/keywords',\n  headers: {'content-type': 'application/json', Authorization: 'Basic REPLACE_BASIC_AUTH'},\n  body: {},\n  json: true\n};\n\nrequest(options, function (error, response, body) {\n  if (error) throw new Error(error);\n\n  console.log(body);\n});\n"},{"lang":"Shell + Curl","source":"curl --request POST \\\n  --url https://api.appskyline.com/api/keywords \\\n  --header 'Authorization: Basic REPLACE_BASIC_AUTH' \\\n  --header 'content-type: application/json' \\\n  --data '{}'"},{"lang":"Shell + Httpie","source":"echo '{}' |  \\\n  http POST https://api.appskyline.com/api/keywords \\\n  Authorization:'Basic REPLACE_BASIC_AUTH' \\\n  content-type:application/json"},{"lang":"Python + Python3","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"api.appskyline.com\")\n\npayload = \"{}\"\n\nheaders = {\n    'content-type': \"application/json\",\n    'Authorization': \"Basic REPLACE_BASIC_AUTH\"\n    }\n\nconn.request(\"POST\", \"/api/keywords\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"},{"lang":"Php + Curl","source":"<?php\n\n$curl = curl_init();\n\ncurl_setopt_array($curl, [\n  CURLOPT_URL => \"https://api.appskyline.com/api/keywords\",\n  CURLOPT_RETURNTRANSFER => true,\n  CURLOPT_ENCODING => \"\",\n  CURLOPT_MAXREDIRS => 10,\n  CURLOPT_TIMEOUT => 30,\n  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,\n  CURLOPT_CUSTOMREQUEST => \"POST\",\n  CURLOPT_POSTFIELDS => \"{}\",\n  CURLOPT_HTTPHEADER => [\n    \"Authorization: Basic REPLACE_BASIC_AUTH\",\n    \"content-type: application/json\"\n  ],\n]);\n\n$response = curl_exec($curl);\n$err = curl_error($curl);\n\ncurl_close($curl);\n\nif ($err) {\n  echo \"cURL Error #:\" . $err;\n} else {\n  echo $response;\n}"},{"lang":"Php + Http1","source":"<?php\n\n$request = new HttpRequest();\n$request->setUrl('https://api.appskyline.com/api/keywords');\n$request->setMethod(HTTP_METH_POST);\n\n$request->setHeaders([\n  'content-type' => 'application/json',\n  'Authorization' => 'Basic REPLACE_BASIC_AUTH'\n]);\n\n$request->setBody('{}');\n\ntry {\n  $response = $request->send();\n\n  echo $response->getBody();\n} catch (HttpException $ex) {\n  echo $ex;\n}"},{"lang":"Php + Http2","source":"<?php\n\n$client = new http\\Client;\n$request = new http\\Client\\Request;\n\n$body = new http\\Message\\Body;\n$body->append('{}');\n\n$request->setRequestUrl('https://api.appskyline.com/api/keywords');\n$request->setRequestMethod('POST');\n$request->setBody($body);\n\n$request->setHeaders([\n  'content-type' => 'application/json',\n  'Authorization' => 'Basic REPLACE_BASIC_AUTH'\n]);\n\n$client->enqueue($request)->send();\n$response = $client->getResponse();\n\necho $response->getBody();"}]}},"/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"}}],"responses":{"200":{"description":"The keyword"},"403":{"description":"API key is missing the `keywords:read` scope"},"404":{"description":"No such keyword in your organization"}},"operationId":"getApiKeywordsKeywordId","x-codeSamples":[{"lang":"Node + Request","source":"const request = require('request');\n\nconst options = {\n  method: 'GET',\n  url: 'https://api.appskyline.com/api/keywords/%7BkeywordId%7D',\n  headers: {Authorization: 'Basic REPLACE_BASIC_AUTH'}\n};\n\nrequest(options, function (error, response, body) {\n  if (error) throw new Error(error);\n\n  console.log(body);\n});\n"},{"lang":"Shell + Curl","source":"curl --request GET \\\n  --url https://api.appskyline.com/api/keywords/%7BkeywordId%7D \\\n  --header 'Authorization: Basic REPLACE_BASIC_AUTH'"},{"lang":"Shell + Httpie","source":"http GET https://api.appskyline.com/api/keywords/%7BkeywordId%7D \\\n  Authorization:'Basic REPLACE_BASIC_AUTH'"},{"lang":"Python + Python3","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"api.appskyline.com\")\n\nheaders = { 'Authorization': \"Basic REPLACE_BASIC_AUTH\" }\n\nconn.request(\"GET\", \"/api/keywords/%7BkeywordId%7D\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"},{"lang":"Php + Curl","source":"<?php\n\n$curl = curl_init();\n\ncurl_setopt_array($curl, [\n  CURLOPT_URL => \"https://api.appskyline.com/api/keywords/%7BkeywordId%7D\",\n  CURLOPT_RETURNTRANSFER => true,\n  CURLOPT_ENCODING => \"\",\n  CURLOPT_MAXREDIRS => 10,\n  CURLOPT_TIMEOUT => 30,\n  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,\n  CURLOPT_CUSTOMREQUEST => \"GET\",\n  CURLOPT_HTTPHEADER => [\n    \"Authorization: Basic REPLACE_BASIC_AUTH\"\n  ],\n]);\n\n$response = curl_exec($curl);\n$err = curl_error($curl);\n\ncurl_close($curl);\n\nif ($err) {\n  echo \"cURL Error #:\" . $err;\n} else {\n  echo $response;\n}"},{"lang":"Php + Http1","source":"<?php\n\n$request = new HttpRequest();\n$request->setUrl('https://api.appskyline.com/api/keywords/%7BkeywordId%7D');\n$request->setMethod(HTTP_METH_GET);\n\n$request->setHeaders([\n  'Authorization' => 'Basic REPLACE_BASIC_AUTH'\n]);\n\ntry {\n  $response = $request->send();\n\n  echo $response->getBody();\n} catch (HttpException $ex) {\n  echo $ex;\n}"},{"lang":"Php + Http2","source":"<?php\n\n$client = new http\\Client;\n$request = new http\\Client\\Request;\n\n$request->setRequestUrl('https://api.appskyline.com/api/keywords/%7BkeywordId%7D');\n$request->setRequestMethod('GET');\n$request->setHeaders([\n  'Authorization' => 'Basic REPLACE_BASIC_AUTH'\n]);\n\n$client->enqueue($request)->send();\n$response = $client->getResponse();\n\necho $response->getBody();"}]},"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"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"description":"The updated keyword"},"404":{"description":"No such keyword in your organization"}},"operationId":"putApiKeywordsKeywordId","x-codeSamples":[{"lang":"Node + Request","source":"const request = require('request');\n\nconst options = {\n  method: 'PUT',\n  url: 'https://api.appskyline.com/api/keywords/%7BkeywordId%7D',\n  headers: {'content-type': 'application/json', Authorization: 'Basic REPLACE_BASIC_AUTH'},\n  body: {},\n  json: true\n};\n\nrequest(options, function (error, response, body) {\n  if (error) throw new Error(error);\n\n  console.log(body);\n});\n"},{"lang":"Shell + Curl","source":"curl --request PUT \\\n  --url https://api.appskyline.com/api/keywords/%7BkeywordId%7D \\\n  --header 'Authorization: Basic REPLACE_BASIC_AUTH' \\\n  --header 'content-type: application/json' \\\n  --data '{}'"},{"lang":"Shell + Httpie","source":"echo '{}' |  \\\n  http PUT https://api.appskyline.com/api/keywords/%7BkeywordId%7D \\\n  Authorization:'Basic REPLACE_BASIC_AUTH' \\\n  content-type:application/json"},{"lang":"Python + Python3","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"api.appskyline.com\")\n\npayload = \"{}\"\n\nheaders = {\n    'content-type': \"application/json\",\n    'Authorization': \"Basic REPLACE_BASIC_AUTH\"\n    }\n\nconn.request(\"PUT\", \"/api/keywords/%7BkeywordId%7D\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"},{"lang":"Php + Curl","source":"<?php\n\n$curl = curl_init();\n\ncurl_setopt_array($curl, [\n  CURLOPT_URL => \"https://api.appskyline.com/api/keywords/%7BkeywordId%7D\",\n  CURLOPT_RETURNTRANSFER => true,\n  CURLOPT_ENCODING => \"\",\n  CURLOPT_MAXREDIRS => 10,\n  CURLOPT_TIMEOUT => 30,\n  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,\n  CURLOPT_CUSTOMREQUEST => \"PUT\",\n  CURLOPT_POSTFIELDS => \"{}\",\n  CURLOPT_HTTPHEADER => [\n    \"Authorization: Basic REPLACE_BASIC_AUTH\",\n    \"content-type: application/json\"\n  ],\n]);\n\n$response = curl_exec($curl);\n$err = curl_error($curl);\n\ncurl_close($curl);\n\nif ($err) {\n  echo \"cURL Error #:\" . $err;\n} else {\n  echo $response;\n}"},{"lang":"Php + Http1","source":"<?php\n\n$request = new HttpRequest();\n$request->setUrl('https://api.appskyline.com/api/keywords/%7BkeywordId%7D');\n$request->setMethod(HTTP_METH_PUT);\n\n$request->setHeaders([\n  'content-type' => 'application/json',\n  'Authorization' => 'Basic REPLACE_BASIC_AUTH'\n]);\n\n$request->setBody('{}');\n\ntry {\n  $response = $request->send();\n\n  echo $response->getBody();\n} catch (HttpException $ex) {\n  echo $ex;\n}"},{"lang":"Php + Http2","source":"<?php\n\n$client = new http\\Client;\n$request = new http\\Client\\Request;\n\n$body = new http\\Message\\Body;\n$body->append('{}');\n\n$request->setRequestUrl('https://api.appskyline.com/api/keywords/%7BkeywordId%7D');\n$request->setRequestMethod('PUT');\n$request->setBody($body);\n\n$request->setHeaders([\n  'content-type' => 'application/json',\n  'Authorization' => 'Basic REPLACE_BASIC_AUTH'\n]);\n\n$client->enqueue($request)->send();\n$response = $client->getResponse();\n\necho $response->getBody();"}]},"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"}}],"responses":{"200":{"description":"Deleted"},"404":{"description":"No such keyword in your organization"}},"operationId":"deleteApiKeywordsKeywordId","x-codeSamples":[{"lang":"Node + Request","source":"const request = require('request');\n\nconst options = {\n  method: 'DELETE',\n  url: 'https://api.appskyline.com/api/keywords/%7BkeywordId%7D',\n  headers: {Authorization: 'Basic REPLACE_BASIC_AUTH'}\n};\n\nrequest(options, function (error, response, body) {\n  if (error) throw new Error(error);\n\n  console.log(body);\n});\n"},{"lang":"Shell + Curl","source":"curl --request DELETE \\\n  --url https://api.appskyline.com/api/keywords/%7BkeywordId%7D \\\n  --header 'Authorization: Basic REPLACE_BASIC_AUTH'"},{"lang":"Shell + Httpie","source":"http DELETE https://api.appskyline.com/api/keywords/%7BkeywordId%7D \\\n  Authorization:'Basic REPLACE_BASIC_AUTH'"},{"lang":"Python + Python3","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"api.appskyline.com\")\n\nheaders = { 'Authorization': \"Basic REPLACE_BASIC_AUTH\" }\n\nconn.request(\"DELETE\", \"/api/keywords/%7BkeywordId%7D\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"},{"lang":"Php + Curl","source":"<?php\n\n$curl = curl_init();\n\ncurl_setopt_array($curl, [\n  CURLOPT_URL => \"https://api.appskyline.com/api/keywords/%7BkeywordId%7D\",\n  CURLOPT_RETURNTRANSFER => true,\n  CURLOPT_ENCODING => \"\",\n  CURLOPT_MAXREDIRS => 10,\n  CURLOPT_TIMEOUT => 30,\n  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,\n  CURLOPT_CUSTOMREQUEST => \"DELETE\",\n  CURLOPT_HTTPHEADER => [\n    \"Authorization: Basic REPLACE_BASIC_AUTH\"\n  ],\n]);\n\n$response = curl_exec($curl);\n$err = curl_error($curl);\n\ncurl_close($curl);\n\nif ($err) {\n  echo \"cURL Error #:\" . $err;\n} else {\n  echo $response;\n}"},{"lang":"Php + Http1","source":"<?php\n\n$request = new HttpRequest();\n$request->setUrl('https://api.appskyline.com/api/keywords/%7BkeywordId%7D');\n$request->setMethod(HTTP_METH_DELETE);\n\n$request->setHeaders([\n  'Authorization' => 'Basic REPLACE_BASIC_AUTH'\n]);\n\ntry {\n  $response = $request->send();\n\n  echo $response->getBody();\n} catch (HttpException $ex) {\n  echo $ex;\n}"},{"lang":"Php + Http2","source":"<?php\n\n$client = new http\\Client;\n$request = new http\\Client\\Request;\n\n$request->setRequestUrl('https://api.appskyline.com/api/keywords/%7BkeywordId%7D');\n$request->setRequestMethod('DELETE');\n$request->setHeaders([\n  'Authorization' => 'Basic REPLACE_BASIC_AUTH'\n]);\n\n$client->enqueue($request)->send();\n$response = $client->getResponse();\n\necho $response->getBody();"}]}},"/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"}}],"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}}}},"400":{"description":"Invalid selector"},"401":{"description":"Authentication required"},"403":{"description":"Insufficient scope or app binding"},"404":{"description":"No matching app in the authenticated organization"}},"x-codeSamples":[{"lang":"Node + Request","source":"const request = require('request');\n\nconst options = {\n  method: 'GET',\n  url: 'https://api.appskyline.com/api/reviewstatuses',\n  qs: {\n    appId: 'SOME_STRING_VALUE',\n    product: 'SOME_STRING_VALUE',\n    store: 'SOME_STRING_VALUE',\n    track: 'SOME_STRING_VALUE',\n    after: 'SOME_STRING_VALUE'\n  },\n  headers: {Authorization: 'Basic REPLACE_BASIC_AUTH'}\n};\n\nrequest(options, function (error, response, body) {\n  if (error) throw new Error(error);\n\n  console.log(body);\n});\n"},{"lang":"Shell + Curl","source":"curl --request GET \\\n  --url 'https://api.appskyline.com/api/reviewstatuses?appId=SOME_STRING_VALUE&product=SOME_STRING_VALUE&store=SOME_STRING_VALUE&track=SOME_STRING_VALUE&after=SOME_STRING_VALUE' \\\n  --header 'Authorization: Basic REPLACE_BASIC_AUTH'"},{"lang":"Shell + Httpie","source":"http GET 'https://api.appskyline.com/api/reviewstatuses?appId=SOME_STRING_VALUE&product=SOME_STRING_VALUE&store=SOME_STRING_VALUE&track=SOME_STRING_VALUE&after=SOME_STRING_VALUE' \\\n  Authorization:'Basic REPLACE_BASIC_AUTH'"},{"lang":"Python + Python3","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"api.appskyline.com\")\n\nheaders = { 'Authorization': \"Basic REPLACE_BASIC_AUTH\" }\n\nconn.request(\"GET\", \"/api/reviewstatuses?appId=SOME_STRING_VALUE&product=SOME_STRING_VALUE&store=SOME_STRING_VALUE&track=SOME_STRING_VALUE&after=SOME_STRING_VALUE\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"},{"lang":"Php + Curl","source":"<?php\n\n$curl = curl_init();\n\ncurl_setopt_array($curl, [\n  CURLOPT_URL => \"https://api.appskyline.com/api/reviewstatuses?appId=SOME_STRING_VALUE&product=SOME_STRING_VALUE&store=SOME_STRING_VALUE&track=SOME_STRING_VALUE&after=SOME_STRING_VALUE\",\n  CURLOPT_RETURNTRANSFER => true,\n  CURLOPT_ENCODING => \"\",\n  CURLOPT_MAXREDIRS => 10,\n  CURLOPT_TIMEOUT => 30,\n  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,\n  CURLOPT_CUSTOMREQUEST => \"GET\",\n  CURLOPT_HTTPHEADER => [\n    \"Authorization: Basic REPLACE_BASIC_AUTH\"\n  ],\n]);\n\n$response = curl_exec($curl);\n$err = curl_error($curl);\n\ncurl_close($curl);\n\nif ($err) {\n  echo \"cURL Error #:\" . $err;\n} else {\n  echo $response;\n}"},{"lang":"Php + Http1","source":"<?php\n\n$request = new HttpRequest();\n$request->setUrl('https://api.appskyline.com/api/reviewstatuses');\n$request->setMethod(HTTP_METH_GET);\n\n$request->setQueryData([\n  'appId' => 'SOME_STRING_VALUE',\n  'product' => 'SOME_STRING_VALUE',\n  'store' => 'SOME_STRING_VALUE',\n  'track' => 'SOME_STRING_VALUE',\n  'after' => 'SOME_STRING_VALUE'\n]);\n\n$request->setHeaders([\n  'Authorization' => 'Basic REPLACE_BASIC_AUTH'\n]);\n\ntry {\n  $response = $request->send();\n\n  echo $response->getBody();\n} catch (HttpException $ex) {\n  echo $ex;\n}"},{"lang":"Php + Http2","source":"<?php\n\n$client = new http\\Client;\n$request = new http\\Client\\Request;\n\n$request->setRequestUrl('https://api.appskyline.com/api/reviewstatuses');\n$request->setRequestMethod('GET');\n$request->setQuery(new http\\QueryString([\n  'appId' => 'SOME_STRING_VALUE',\n  'product' => 'SOME_STRING_VALUE',\n  'store' => 'SOME_STRING_VALUE',\n  'track' => 'SOME_STRING_VALUE',\n  'after' => 'SOME_STRING_VALUE'\n]));\n\n$request->setHeaders([\n  'Authorization' => 'Basic REPLACE_BASIC_AUTH'\n]);\n\n$client->enqueue($request)->send();\n$response = $client->getResponse();\n\necho $response->getBody();"}]}},"/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"}}}}}}},"429":{"description":"Anonymous rate limit exceeded; retry after `Retry-After` seconds."}},"operationId":"getApiSandboxKeywords","x-codeSamples":[{"lang":"Node + Request","source":"const request = require('request');\n\nconst options = {method: 'GET', url: 'https://api.appskyline.com/api/sandbox/keywords'};\n\nrequest(options, function (error, response, body) {\n  if (error) throw new Error(error);\n\n  console.log(body);\n});\n"},{"lang":"Shell + Curl","source":"curl --request GET \\\n  --url https://api.appskyline.com/api/sandbox/keywords"},{"lang":"Shell + Httpie","source":"http GET https://api.appskyline.com/api/sandbox/keywords"},{"lang":"Python + Python3","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"api.appskyline.com\")\n\nconn.request(\"GET\", \"/api/sandbox/keywords\")\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"},{"lang":"Php + Curl","source":"<?php\n\n$curl = curl_init();\n\ncurl_setopt_array($curl, [\n  CURLOPT_URL => \"https://api.appskyline.com/api/sandbox/keywords\",\n  CURLOPT_RETURNTRANSFER => true,\n  CURLOPT_ENCODING => \"\",\n  CURLOPT_MAXREDIRS => 10,\n  CURLOPT_TIMEOUT => 30,\n  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,\n  CURLOPT_CUSTOMREQUEST => \"GET\",\n]);\n\n$response = curl_exec($curl);\n$err = curl_error($curl);\n\ncurl_close($curl);\n\nif ($err) {\n  echo \"cURL Error #:\" . $err;\n} else {\n  echo $response;\n}"},{"lang":"Php + Http1","source":"<?php\n\n$request = new HttpRequest();\n$request->setUrl('https://api.appskyline.com/api/sandbox/keywords');\n$request->setMethod(HTTP_METH_GET);\n\ntry {\n  $response = $request->send();\n\n  echo $response->getBody();\n} catch (HttpException $ex) {\n  echo $ex;\n}"},{"lang":"Php + Http2","source":"<?php\n\n$client = new http\\Client;\n$request = new http\\Client\\Request;\n\n$request->setRequestUrl('https://api.appskyline.com/api/sandbox/keywords');\n$request->setRequestMethod('GET');\n$client->enqueue($request)->send();\n$response = $client->getResponse();\n\necho $response->getBody();"}]}},"/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":{"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."}},"operationId":"postApiSandboxRankchecks","x-codeSamples":[{"lang":"Node + Request","source":"const request = require('request');\n\nconst options = {method: 'POST', url: 'https://api.appskyline.com/api/sandbox/rankchecks'};\n\nrequest(options, function (error, response, body) {\n  if (error) throw new Error(error);\n\n  console.log(body);\n});\n"},{"lang":"Shell + Curl","source":"curl --request POST \\\n  --url https://api.appskyline.com/api/sandbox/rankchecks"},{"lang":"Shell + Httpie","source":"http POST https://api.appskyline.com/api/sandbox/rankchecks"},{"lang":"Python + Python3","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"api.appskyline.com\")\n\nconn.request(\"POST\", \"/api/sandbox/rankchecks\")\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"},{"lang":"Php + Curl","source":"<?php\n\n$curl = curl_init();\n\ncurl_setopt_array($curl, [\n  CURLOPT_URL => \"https://api.appskyline.com/api/sandbox/rankchecks\",\n  CURLOPT_RETURNTRANSFER => true,\n  CURLOPT_ENCODING => \"\",\n  CURLOPT_MAXREDIRS => 10,\n  CURLOPT_TIMEOUT => 30,\n  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,\n  CURLOPT_CUSTOMREQUEST => \"POST\",\n]);\n\n$response = curl_exec($curl);\n$err = curl_error($curl);\n\ncurl_close($curl);\n\nif ($err) {\n  echo \"cURL Error #:\" . $err;\n} else {\n  echo $response;\n}"},{"lang":"Php + Http1","source":"<?php\n\n$request = new HttpRequest();\n$request->setUrl('https://api.appskyline.com/api/sandbox/rankchecks');\n$request->setMethod(HTTP_METH_POST);\n\ntry {\n  $response = $request->send();\n\n  echo $response->getBody();\n} catch (HttpException $ex) {\n  echo $ex;\n}"},{"lang":"Php + Http2","source":"<?php\n\n$client = new http\\Client;\n$request = new http\\Client\\Request;\n\n$request->setRequestUrl('https://api.appskyline.com/api/sandbox/rankchecks');\n$request->setRequestMethod('POST');\n$client->enqueue($request)->send();\n$response = $client->getResponse();\n\necho $response->getBody();"}]}},"/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"}}],"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"}}}}}}}}},"404":{"description":"Unknown job id."}},"operationId":"getApiSandboxRankchecksJobId","x-codeSamples":[{"lang":"Node + Request","source":"const request = require('request');\n\nconst options = {\n  method: 'GET',\n  url: 'https://api.appskyline.com/api/sandbox/rankchecks/%7BjobId%7D'\n};\n\nrequest(options, function (error, response, body) {\n  if (error) throw new Error(error);\n\n  console.log(body);\n});\n"},{"lang":"Shell + Curl","source":"curl --request GET \\\n  --url https://api.appskyline.com/api/sandbox/rankchecks/%7BjobId%7D"},{"lang":"Shell + Httpie","source":"http GET https://api.appskyline.com/api/sandbox/rankchecks/%7BjobId%7D"},{"lang":"Python + Python3","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"api.appskyline.com\")\n\nconn.request(\"GET\", \"/api/sandbox/rankchecks/%7BjobId%7D\")\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"},{"lang":"Php + Curl","source":"<?php\n\n$curl = curl_init();\n\ncurl_setopt_array($curl, [\n  CURLOPT_URL => \"https://api.appskyline.com/api/sandbox/rankchecks/%7BjobId%7D\",\n  CURLOPT_RETURNTRANSFER => true,\n  CURLOPT_ENCODING => \"\",\n  CURLOPT_MAXREDIRS => 10,\n  CURLOPT_TIMEOUT => 30,\n  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,\n  CURLOPT_CUSTOMREQUEST => \"GET\",\n]);\n\n$response = curl_exec($curl);\n$err = curl_error($curl);\n\ncurl_close($curl);\n\nif ($err) {\n  echo \"cURL Error #:\" . $err;\n} else {\n  echo $response;\n}"},{"lang":"Php + Http1","source":"<?php\n\n$request = new HttpRequest();\n$request->setUrl('https://api.appskyline.com/api/sandbox/rankchecks/%7BjobId%7D');\n$request->setMethod(HTTP_METH_GET);\n\ntry {\n  $response = $request->send();\n\n  echo $response->getBody();\n} catch (HttpException $ex) {\n  echo $ex;\n}"},{"lang":"Php + Http2","source":"<?php\n\n$client = new http\\Client;\n$request = new http\\Client\\Request;\n\n$request->setRequestUrl('https://api.appskyline.com/api/sandbox/rankchecks/%7BjobId%7D');\n$request->setRequestMethod('GET');\n$client->enqueue($request)->send();\n$response = $client->getResponse();\n\necho $response->getBody();"}]}},"/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)"}},"operationId":"getApiWebhooksubscriptions","x-codeSamples":[{"lang":"Node + Request","source":"const request = require('request');\n\nconst options = {\n  method: 'GET',\n  url: 'https://api.appskyline.com/api/webhooksubscriptions',\n  headers: {Authorization: 'REPLACE_KEY_VALUE'}\n};\n\nrequest(options, function (error, response, body) {\n  if (error) throw new Error(error);\n\n  console.log(body);\n});\n"},{"lang":"Shell + Curl","source":"curl --request GET \\\n  --url https://api.appskyline.com/api/webhooksubscriptions \\\n  --header 'Authorization: REPLACE_KEY_VALUE'"},{"lang":"Shell + Httpie","source":"http GET https://api.appskyline.com/api/webhooksubscriptions \\\n  Authorization:REPLACE_KEY_VALUE"},{"lang":"Python + Python3","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"api.appskyline.com\")\n\nheaders = { 'Authorization': \"REPLACE_KEY_VALUE\" }\n\nconn.request(\"GET\", \"/api/webhooksubscriptions\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"},{"lang":"Php + Curl","source":"<?php\n\n$curl = curl_init();\n\ncurl_setopt_array($curl, [\n  CURLOPT_URL => \"https://api.appskyline.com/api/webhooksubscriptions\",\n  CURLOPT_RETURNTRANSFER => true,\n  CURLOPT_ENCODING => \"\",\n  CURLOPT_MAXREDIRS => 10,\n  CURLOPT_TIMEOUT => 30,\n  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,\n  CURLOPT_CUSTOMREQUEST => \"GET\",\n  CURLOPT_HTTPHEADER => [\n    \"Authorization: REPLACE_KEY_VALUE\"\n  ],\n]);\n\n$response = curl_exec($curl);\n$err = curl_error($curl);\n\ncurl_close($curl);\n\nif ($err) {\n  echo \"cURL Error #:\" . $err;\n} else {\n  echo $response;\n}"},{"lang":"Php + Http1","source":"<?php\n\n$request = new HttpRequest();\n$request->setUrl('https://api.appskyline.com/api/webhooksubscriptions');\n$request->setMethod(HTTP_METH_GET);\n\n$request->setHeaders([\n  'Authorization' => 'REPLACE_KEY_VALUE'\n]);\n\ntry {\n  $response = $request->send();\n\n  echo $response->getBody();\n} catch (HttpException $ex) {\n  echo $ex;\n}"},{"lang":"Php + Http2","source":"<?php\n\n$client = new http\\Client;\n$request = new http\\Client\\Request;\n\n$request->setRequestUrl('https://api.appskyline.com/api/webhooksubscriptions');\n$request->setRequestMethod('GET');\n$request->setHeaders([\n  'Authorization' => 'REPLACE_KEY_VALUE'\n]);\n\n$client->enqueue($request)->send();\n$response = $client->getResponse();\n\necho $response->getBody();"}]},"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"}},"operationId":"postApiWebhooksubscriptions","x-codeSamples":[{"lang":"Node + Request","source":"const request = require('request');\n\nconst options = {\n  method: 'POST',\n  url: 'https://api.appskyline.com/api/webhooksubscriptions',\n  headers: {'content-type': 'application/json', Authorization: 'REPLACE_KEY_VALUE'},\n  body: {url: 'https://example.com/appskyline-webhook', events: ['app.created']},\n  json: true\n};\n\nrequest(options, function (error, response, body) {\n  if (error) throw new Error(error);\n\n  console.log(body);\n});\n"},{"lang":"Shell + Curl","source":"curl --request POST \\\n  --url https://api.appskyline.com/api/webhooksubscriptions \\\n  --header 'Authorization: REPLACE_KEY_VALUE' \\\n  --header 'content-type: application/json' \\\n  --data '{\"url\":\"https://example.com/appskyline-webhook\",\"events\":[\"app.created\"]}'"},{"lang":"Shell + Httpie","source":"echo '{\"url\":\"https://example.com/appskyline-webhook\",\"events\":[\"app.created\"]}' |  \\\n  http POST https://api.appskyline.com/api/webhooksubscriptions \\\n  Authorization:REPLACE_KEY_VALUE \\\n  content-type:application/json"},{"lang":"Python + Python3","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"api.appskyline.com\")\n\npayload = \"{\\\"url\\\":\\\"https://example.com/appskyline-webhook\\\",\\\"events\\\":[\\\"app.created\\\"]}\"\n\nheaders = {\n    'content-type': \"application/json\",\n    'Authorization': \"REPLACE_KEY_VALUE\"\n    }\n\nconn.request(\"POST\", \"/api/webhooksubscriptions\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"},{"lang":"Php + Curl","source":"<?php\n\n$curl = curl_init();\n\ncurl_setopt_array($curl, [\n  CURLOPT_URL => \"https://api.appskyline.com/api/webhooksubscriptions\",\n  CURLOPT_RETURNTRANSFER => true,\n  CURLOPT_ENCODING => \"\",\n  CURLOPT_MAXREDIRS => 10,\n  CURLOPT_TIMEOUT => 30,\n  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,\n  CURLOPT_CUSTOMREQUEST => \"POST\",\n  CURLOPT_POSTFIELDS => \"{\\\"url\\\":\\\"https://example.com/appskyline-webhook\\\",\\\"events\\\":[\\\"app.created\\\"]}\",\n  CURLOPT_HTTPHEADER => [\n    \"Authorization: REPLACE_KEY_VALUE\",\n    \"content-type: application/json\"\n  ],\n]);\n\n$response = curl_exec($curl);\n$err = curl_error($curl);\n\ncurl_close($curl);\n\nif ($err) {\n  echo \"cURL Error #:\" . $err;\n} else {\n  echo $response;\n}"},{"lang":"Php + Http1","source":"<?php\n\n$request = new HttpRequest();\n$request->setUrl('https://api.appskyline.com/api/webhooksubscriptions');\n$request->setMethod(HTTP_METH_POST);\n\n$request->setHeaders([\n  'content-type' => 'application/json',\n  'Authorization' => 'REPLACE_KEY_VALUE'\n]);\n\n$request->setBody('{\"url\":\"https://example.com/appskyline-webhook\",\"events\":[\"app.created\"]}');\n\ntry {\n  $response = $request->send();\n\n  echo $response->getBody();\n} catch (HttpException $ex) {\n  echo $ex;\n}"},{"lang":"Php + Http2","source":"<?php\n\n$client = new http\\Client;\n$request = new http\\Client\\Request;\n\n$body = new http\\Message\\Body;\n$body->append('{\"url\":\"https://example.com/appskyline-webhook\",\"events\":[\"app.created\"]}');\n\n$request->setRequestUrl('https://api.appskyline.com/api/webhooksubscriptions');\n$request->setRequestMethod('POST');\n$request->setBody($body);\n\n$request->setHeaders([\n  'content-type' => 'application/json',\n  'Authorization' => 'REPLACE_KEY_VALUE'\n]);\n\n$client->enqueue($request)->send();\n$response = $client->getResponse();\n\necho $response->getBody();"}]}},"/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"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"description":"The updated subscription (without secret)"}},"operationId":"putApiWebhooksubscriptionsWebhookSubscriptionId","x-codeSamples":[{"lang":"Node + Request","source":"const request = require('request');\n\nconst options = {\n  method: 'PUT',\n  url: 'https://api.appskyline.com/api/webhooksubscriptions/%7BwebhookSubscriptionId%7D',\n  headers: {'content-type': 'application/json', Authorization: 'REPLACE_KEY_VALUE'},\n  body: {},\n  json: true\n};\n\nrequest(options, function (error, response, body) {\n  if (error) throw new Error(error);\n\n  console.log(body);\n});\n"},{"lang":"Shell + Curl","source":"curl --request PUT \\\n  --url https://api.appskyline.com/api/webhooksubscriptions/%7BwebhookSubscriptionId%7D \\\n  --header 'Authorization: REPLACE_KEY_VALUE' \\\n  --header 'content-type: application/json' \\\n  --data '{}'"},{"lang":"Shell + Httpie","source":"echo '{}' |  \\\n  http PUT https://api.appskyline.com/api/webhooksubscriptions/%7BwebhookSubscriptionId%7D \\\n  Authorization:REPLACE_KEY_VALUE \\\n  content-type:application/json"},{"lang":"Python + Python3","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"api.appskyline.com\")\n\npayload = \"{}\"\n\nheaders = {\n    'content-type': \"application/json\",\n    'Authorization': \"REPLACE_KEY_VALUE\"\n    }\n\nconn.request(\"PUT\", \"/api/webhooksubscriptions/%7BwebhookSubscriptionId%7D\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"},{"lang":"Php + Curl","source":"<?php\n\n$curl = curl_init();\n\ncurl_setopt_array($curl, [\n  CURLOPT_URL => \"https://api.appskyline.com/api/webhooksubscriptions/%7BwebhookSubscriptionId%7D\",\n  CURLOPT_RETURNTRANSFER => true,\n  CURLOPT_ENCODING => \"\",\n  CURLOPT_MAXREDIRS => 10,\n  CURLOPT_TIMEOUT => 30,\n  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,\n  CURLOPT_CUSTOMREQUEST => \"PUT\",\n  CURLOPT_POSTFIELDS => \"{}\",\n  CURLOPT_HTTPHEADER => [\n    \"Authorization: REPLACE_KEY_VALUE\",\n    \"content-type: application/json\"\n  ],\n]);\n\n$response = curl_exec($curl);\n$err = curl_error($curl);\n\ncurl_close($curl);\n\nif ($err) {\n  echo \"cURL Error #:\" . $err;\n} else {\n  echo $response;\n}"},{"lang":"Php + Http1","source":"<?php\n\n$request = new HttpRequest();\n$request->setUrl('https://api.appskyline.com/api/webhooksubscriptions/%7BwebhookSubscriptionId%7D');\n$request->setMethod(HTTP_METH_PUT);\n\n$request->setHeaders([\n  'content-type' => 'application/json',\n  'Authorization' => 'REPLACE_KEY_VALUE'\n]);\n\n$request->setBody('{}');\n\ntry {\n  $response = $request->send();\n\n  echo $response->getBody();\n} catch (HttpException $ex) {\n  echo $ex;\n}"},{"lang":"Php + Http2","source":"<?php\n\n$client = new http\\Client;\n$request = new http\\Client\\Request;\n\n$body = new http\\Message\\Body;\n$body->append('{}');\n\n$request->setRequestUrl('https://api.appskyline.com/api/webhooksubscriptions/%7BwebhookSubscriptionId%7D');\n$request->setRequestMethod('PUT');\n$request->setBody($body);\n\n$request->setHeaders([\n  'content-type' => 'application/json',\n  'Authorization' => 'REPLACE_KEY_VALUE'\n]);\n\n$client->enqueue($request)->send();\n$response = $client->getResponse();\n\necho $response->getBody();"}]},"delete":{"tags":["Webhook subscriptions"],"summary":"Delete a webhook subscription","security":[{"accessToken":[]}],"parameters":[{"in":"path","name":"webhookSubscriptionId","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Deleted"}},"operationId":"deleteApiWebhooksubscriptionsWebhookSubscriptionId","description":"Delete a webhook subscription","x-codeSamples":[{"lang":"Node + Request","source":"const request = require('request');\n\nconst options = {\n  method: 'DELETE',\n  url: 'https://api.appskyline.com/api/webhooksubscriptions/%7BwebhookSubscriptionId%7D',\n  headers: {Authorization: 'REPLACE_KEY_VALUE'}\n};\n\nrequest(options, function (error, response, body) {\n  if (error) throw new Error(error);\n\n  console.log(body);\n});\n"},{"lang":"Shell + Curl","source":"curl --request DELETE \\\n  --url https://api.appskyline.com/api/webhooksubscriptions/%7BwebhookSubscriptionId%7D \\\n  --header 'Authorization: REPLACE_KEY_VALUE'"},{"lang":"Shell + Httpie","source":"http DELETE https://api.appskyline.com/api/webhooksubscriptions/%7BwebhookSubscriptionId%7D \\\n  Authorization:REPLACE_KEY_VALUE"},{"lang":"Python + Python3","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"api.appskyline.com\")\n\nheaders = { 'Authorization': \"REPLACE_KEY_VALUE\" }\n\nconn.request(\"DELETE\", \"/api/webhooksubscriptions/%7BwebhookSubscriptionId%7D\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"},{"lang":"Php + Curl","source":"<?php\n\n$curl = curl_init();\n\ncurl_setopt_array($curl, [\n  CURLOPT_URL => \"https://api.appskyline.com/api/webhooksubscriptions/%7BwebhookSubscriptionId%7D\",\n  CURLOPT_RETURNTRANSFER => true,\n  CURLOPT_ENCODING => \"\",\n  CURLOPT_MAXREDIRS => 10,\n  CURLOPT_TIMEOUT => 30,\n  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,\n  CURLOPT_CUSTOMREQUEST => \"DELETE\",\n  CURLOPT_HTTPHEADER => [\n    \"Authorization: REPLACE_KEY_VALUE\"\n  ],\n]);\n\n$response = curl_exec($curl);\n$err = curl_error($curl);\n\ncurl_close($curl);\n\nif ($err) {\n  echo \"cURL Error #:\" . $err;\n} else {\n  echo $response;\n}"},{"lang":"Php + Http1","source":"<?php\n\n$request = new HttpRequest();\n$request->setUrl('https://api.appskyline.com/api/webhooksubscriptions/%7BwebhookSubscriptionId%7D');\n$request->setMethod(HTTP_METH_DELETE);\n\n$request->setHeaders([\n  'Authorization' => 'REPLACE_KEY_VALUE'\n]);\n\ntry {\n  $response = $request->send();\n\n  echo $response->getBody();\n} catch (HttpException $ex) {\n  echo $ex;\n}"},{"lang":"Php + Http2","source":"<?php\n\n$client = new http\\Client;\n$request = new http\\Client\\Request;\n\n$request->setRequestUrl('https://api.appskyline.com/api/webhooksubscriptions/%7BwebhookSubscriptionId%7D');\n$request->setRequestMethod('DELETE');\n$request->setHeaders([\n  'Authorization' => 'REPLACE_KEY_VALUE'\n]);\n\n$client->enqueue($request)->send();\n$response = $client->getResponse();\n\necho $response->getBody();"}]}}},"tags":[]}