{
  "openapi": "3.0.1",
  "info": {
    "title": "Review Insights AI – Complaints, Bugs & Feature Requests",
    "description": "Turns customer reviews into ranked complaints, bugs, feature requests and praise, with share of reviews, trends, app versions and real quotes. Reads App Store reviews directly, and Amazon, Google Play, Google Maps or Trustpilot reviews from any scraper's dataset or a CSV.",
    "version": "0.1",
    "x-build-id": "pWEr2k1tZG5hfA0lC"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/yck69~review-insights/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-yck69-review-insights",
        "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/yck69~review-insights/runs": {
      "post": {
        "operationId": "runs-sync-yck69-review-insights",
        "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/yck69~review-insights/run-sync": {
      "post": {
        "operationId": "run-sync-yck69-review-insights",
        "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",
        "properties": {
          "appStoreApps": {
            "title": "App Store apps",
            "type": "array",
            "description": "App Store links, app IDs or app names. Reads up to 500 recent and 500 most helpful reviews per country. Add competitors to compare them topic by topic.",
            "items": {
              "type": "string"
            }
          },
          "countries": {
            "title": "App Store countries",
            "type": "array",
            "description": "Two-letter store codes (us, gb, fr, de…), read in order until the maximum is reached. Empty: the country in the app link, else us.",
            "items": {
              "type": "string"
            }
          },
          "datasetIds": {
            "title": "Reviews from an Apify dataset",
            "type": "array",
            "description": "Dataset IDs from any review scraper (Amazon, Google Play, Google Maps, Trustpilot, Booking, Yelp…). Text, rating, date, product and version fields are detected automatically.",
            "items": {
              "type": "string"
            }
          },
          "fileUrls": {
            "title": "Review files (URLs)",
            "type": "array",
            "description": "CSV, JSON or JSON Lines files with one review per row, e.g. an export from a helpdesk, survey or e-commerce back office.",
            "items": {
              "type": "string"
            }
          },
          "reviews": {
            "title": "Pasted reviews",
            "type": "array",
            "description": "One review per line. Start with a rating to include it: \"2 | The app crashes when I log in\".",
            "items": {
              "type": "string"
            }
          },
          "productName": {
            "title": "Product name",
            "type": "string",
            "description": "Name used for datasets, files and pasted reviews that have no product field."
          },
          "fieldMapping": {
            "title": "Field mapping",
            "type": "object",
            "description": "Only if detection picks the wrong fields: {\"text\": \"reviewBody\", \"rating\": \"stars\", \"date\": \"reviewDate\", \"product\": \"asin\"}. Also: title, version, id, url, country. Dotted paths work (\"rating.value\")."
          },
          "maxReviews": {
            "title": "Maximum reviews per product",
            "minimum": 1,
            "maximum": 10000,
            "type": "integer",
            "description": "The most recent reviews are kept. 1,000 reviews take about 3 minutes.",
            "default": 1000
          },
          "lastDays": {
            "title": "Only the last (days)",
            "minimum": 1,
            "type": "integer",
            "description": "Keep reviews published in the last N days."
          },
          "publishedAfter": {
            "title": "Published after",
            "type": "string",
            "description": "Keep reviews published on or after this date."
          },
          "maxTopicsPerType": {
            "title": "Topics per type",
            "minimum": 1,
            "maximum": 30,
            "type": "integer",
            "description": "Most-mentioned topics kept for each type (complaints, bugs, requests, praise).",
            "default": 10
          },
          "minMentions": {
            "title": "Minimum mentions",
            "minimum": 1,
            "maximum": 100,
            "type": "integer",
            "description": "A topic needs at least this many reviews.",
            "default": 2
          },
          "aiProvider": {
            "title": "AI",
            "enum": [
              "none",
              "apify",
              "anthropic"
            ],
            "type": "string",
            "description": "Optional: an AI model turns each topic into a short title, a one-line summary and a suggested action, writes an executive summary and drops vague topics. Counts and quotes always come from the analysis.<br><b>Apify AI</b>: billed to your Apify account at the model's list price on paid plans (about 10 times more on the free plan). With the default Claude Opus 5.5 a report costs roughly $0.05 to $0.15; with anthropic/claude-haiku-5.5 under a cent.<br><b>Anthropic</b>: your own API key, billed by Anthropic.",
            "default": "none"
          },
          "anthropicApiKey": {
            "title": "Anthropic API key",
            "type": "string",
            "description": "Used only with the Anthropic option."
          },
          "aiModel": {
            "title": "AI model",
            "type": "string",
            "description": "Default: Claude Opus 5.5 (anthropic/claude-opus-5.5 with Apify AI, claude-opus-5-5 with your key). Claude Haiku 5.5 (anthropic/claude-haiku-5.5 or claude-haiku-5-5) costs far less. With Apify AI, any OpenRouter model ID works."
          },
          "reportLanguage": {
            "title": "Language of AI summaries",
            "type": "string",
            "description": "Quotes stay in their original language.",
            "default": "English"
          }
        }
      },
      "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
                  },
                  "PROXY_UNBLOCKER_UNITS": {
                    "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
                  },
                  "PROXY_UNBLOCKER_UNITS": {
                    "type": "integer",
                    "example": 0
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}