{
  "openapi": "3.0.1",
  "info": {
    "title": "Apple App Store Review Alerts — New Reviews Only",
    "description": "Monitor new or edited Apple App Store reviews without duplicates. Filter low ratings by app and country for Slack, email, n8n, or Make alerts.",
    "version": "1.0",
    "x-build-id": "qCNXGoLUMCHNc36Wb"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/keratogenous_duty_n6g~app-store-new-reviews-monitor/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-keratogenous_duty_n6g-app-store-new-reviews-monitor",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/acts/keratogenous_duty_n6g~app-store-new-reviews-monitor/runs": {
      "post": {
        "operationId": "runs-sync-keratogenous_duty_n6g-app-store-new-reviews-monitor",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor and returns information about the initiated run in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/runsResponseSchema"
                }
              }
            }
          }
        }
      }
    },
    "/acts/keratogenous_duty_n6g~app-store-new-reviews-monitor/run-sync": {
      "post": {
        "operationId": "run-sync-keratogenous_duty_n6g-app-store-new-reviews-monitor",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    }
  },
  "components": {
    "schemas": {
      "inputSchema": {
        "type": "object",
        "required": [
          "apps"
        ],
        "properties": {
          "apps": {
            "title": "Apps",
            "minItems": 1,
            "maxItems": 25,
            "uniqueItems": true,
            "type": "array",
            "description": "Apple bundle IDs (com.company.app), numeric App IDs, or apps.apple.com URLs. Resolution is exact; unresolved identifiers fail instead of falling back to another app.",
            "items": {
              "type": "string"
            }
          },
          "countries": {
            "title": "App Store countries",
            "minItems": 1,
            "maxItems": 10,
            "uniqueItems": true,
            "type": "array",
            "description": "Two-letter storefront codes. Each app × country keeps independent state.",
            "items": {
              "type": "string",
              "pattern": "^[A-Za-z]{2}$"
            },
            "default": [
              "us"
            ]
          },
          "mode": {
            "title": "Run mode",
            "enum": [
              "delta",
              "snapshot"
            ],
            "type": "string",
            "description": "Delta uses persistent state. Snapshot returns the current visible reviews without reading or changing delta state.",
            "default": "delta"
          },
          "firstRun": {
            "title": "First delta run",
            "enum": [
              "emitAll",
              "baseline"
            ],
            "type": "string",
            "description": "Emit the initial backfill so the first run has useful data, or silently establish a baseline for alert-only workflows.",
            "default": "emitAll"
          },
          "stateKey": {
            "title": "Monitor state key",
            "minLength": 1,
            "maxLength": 100,
            "type": "string",
            "description": "Optional stable name for an independent monitor. Saved Tasks automatically use their Task ID when this is blank; direct runs use a stable direct namespace and resolved app-country record keys. Set a different explicit value for independent direct workflows over the same targets."
          },
          "resetState": {
            "title": "Reset this monitor",
            "type": "boolean",
            "description": "Ignore saved state for this run and replace it only after each target succeeds. Turn this off again after the reset run.",
            "default": false
          },
          "maxPages": {
            "title": "Maximum pages per app × country",
            "minimum": 1,
            "maximum": 10,
            "type": "integer",
            "description": "Apple exposes up to 50 reviews per page and at most 10 pages. Delta runs stop earlier after reaching saved state. If the selected window cannot reach state, the target fails without charging or advancing and asks you to increase this value.",
            "default": 2
          },
          "minRating": {
            "title": "Minimum rating",
            "minimum": 1,
            "maximum": 5,
            "type": "integer",
            "description": "Only output reviews at or above this rating.",
            "default": 1
          },
          "maxRating": {
            "title": "Maximum rating",
            "minimum": 1,
            "maximum": 5,
            "type": "integer",
            "description": "Set to 2 for a new low-rating alert feed.",
            "default": 5
          },
          "since": {
            "title": "Only output reviews updated since",
            "type": "string",
            "description": "Optional ISO 8601 date-time output filter. State still remembers filtered reviews to keep future runs idempotent."
          },
          "versions": {
            "title": "App versions",
            "maxItems": 50,
            "uniqueItems": true,
            "type": "array",
            "description": "Optional exact version values such as 9.1.62.",
            "items": {
              "type": "string"
            }
          },
          "includeKeywords": {
            "title": "Include keywords",
            "maxItems": 50,
            "uniqueItems": true,
            "type": "array",
            "description": "Output a review when its title or body contains any keyword, case-insensitively.",
            "items": {
              "type": "string"
            }
          },
          "excludeKeywords": {
            "title": "Exclude keywords",
            "maxItems": 50,
            "uniqueItems": true,
            "type": "array",
            "description": "Do not output a review when its title or body contains any keyword, case-insensitively.",
            "items": {
              "type": "string"
            }
          }
        }
      },
      "runsResponseSchema": {
        "type": "object",
        "properties": {
          "data": {
            "type": "object",
            "properties": {
              "id": {
                "type": "string"
              },
              "actId": {
                "type": "string"
              },
              "userId": {
                "type": "string"
              },
              "startedAt": {
                "type": "string",
                "format": "date-time",
                "example": "2025-01-08T00:00:00.000Z"
              },
              "finishedAt": {
                "type": "string",
                "format": "date-time",
                "example": "2025-01-08T00:00:00.000Z"
              },
              "status": {
                "type": "string",
                "example": "READY"
              },
              "meta": {
                "type": "object",
                "properties": {
                  "origin": {
                    "type": "string",
                    "example": "API"
                  },
                  "userAgent": {
                    "type": "string"
                  }
                }
              },
              "stats": {
                "type": "object",
                "properties": {
                  "inputBodyLen": {
                    "type": "integer",
                    "example": 2000
                  },
                  "rebootCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "restartCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "resurrectCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "computeUnits": {
                    "type": "integer",
                    "example": 0
                  }
                }
              },
              "options": {
                "type": "object",
                "properties": {
                  "build": {
                    "type": "string",
                    "example": "latest"
                  },
                  "timeoutSecs": {
                    "type": "integer",
                    "example": 300
                  },
                  "memoryMbytes": {
                    "type": "integer",
                    "example": 1024
                  },
                  "diskMbytes": {
                    "type": "integer",
                    "example": 2048
                  }
                }
              },
              "buildId": {
                "type": "string"
              },
              "defaultKeyValueStoreId": {
                "type": "string"
              },
              "defaultDatasetId": {
                "type": "string"
              },
              "defaultRequestQueueId": {
                "type": "string"
              },
              "buildNumber": {
                "type": "string",
                "example": "1.0.0"
              },
              "containerUrl": {
                "type": "string"
              },
              "usage": {
                "type": "object",
                "properties": {
                  "ACTOR_COMPUTE_UNITS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_WRITES": {
                    "type": "integer",
                    "example": 1
                  },
                  "KEY_VALUE_STORE_LISTS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_INTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_EXTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_SERPS": {
                    "type": "integer",
                    "example": 0
                  }
                }
              },
              "usageTotalUsd": {
                "type": "number",
                "example": 0.00005
              },
              "usageUsd": {
                "type": "object",
                "properties": {
                  "ACTOR_COMPUTE_UNITS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_WRITES": {
                    "type": "number",
                    "example": 0.00005
                  },
                  "KEY_VALUE_STORE_LISTS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_INTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_EXTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_SERPS": {
                    "type": "integer",
                    "example": 0
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}