{
  "openapi": "3.0.1",
  "info": {
    "title": "Reviews to Fix List & Reply Drafts",
    "description": "Turn Google Maps, TripAdvisor, Booking, App Store and Google Play reviews into a ranked fix list per place or app, with themes, trends and reply drafts.",
    "version": "0.2",
    "x-build-id": "kaNzQjSzbLMBspY6u"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/seasons-ai~reviews-to-fix-list/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-seasons-ai-reviews-to-fix-list",
        "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/seasons-ai~reviews-to-fix-list/runs": {
      "post": {
        "operationId": "runs-sync-seasons-ai-reviews-to-fix-list",
        "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/seasons-ai~reviews-to-fix-list/run-sync": {
      "post": {
        "operationId": "run-sync-seasons-ai-reviews-to-fix-list",
        "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": {
          "datasetId": {
            "title": "Reviews dataset",
            "type": "string",
            "description": "Pick the dataset of a review scraper run. Detected automatically, item by item: Google Maps Reviews Scraper (compass/google-maps-reviews-scraper), Tripadvisor Reviews Scraper (maxcopell/tripadvisor-reviews), Booking Reviews Scraper (voyager/booking-reviews-scraper), App Store Reviews Scraper (thewolves/appstore-reviews-scraper) and Google Play Reviews Scraper (thewolves/google-play-reviews-scraper). App store reviews get an app report with product feedback themes (bugs, crashes, missing features, pricing, UX, support). Other datasets work too if each item has review text (`text`) and/or a rating (`stars`, `rating` or `score`). When set, `reviewsUrl` and `items` are ignored. The Actor only reads this dataset."
          },
          "reviewsUrl": {
            "title": "Reviews file URL (JSON or CSV)",
            "type": "string",
            "description": "Instead of a dataset: a public link to a JSON array, JSON Lines or CSV file with one review per row, e.g. an export of one of the scrapers above, or your own columns such as text, stars, publishedAtDate, title (place name). Up to 50 MB."
          },
          "items": {
            "title": "Reviews as JSON",
            "type": "array",
            "description": "Instead of a dataset or file: paste reviews as a JSON array, e.g. [{\"title\": \"My Cafe\", \"text\": \"...\", \"stars\": 2, \"publishedAtDate\": \"2026-10-01\"}]. Used only when no dataset or file URL is given."
          },
          "maxReviews": {
            "title": "Max reviews to analyse",
            "minimum": 1,
            "maximum": 5000,
            "type": "integer",
            "description": "Cap on reviews with text analysed (and charged) in this run, 1 to 5,000. The newest reviews of each place or app are kept first. Rating-only reviews (no text) are free and only counted in the stats.",
            "default": 1000
          },
          "periodDays": {
            "title": "Trend period (days)",
            "minimum": 7,
            "maximum": 365,
            "type": "integer",
            "description": "Each theme's share of reviews in the last N days is compared with the N days before. The period ends at the newest review of each place or app.",
            "default": 30
          },
          "themeTaxonomy": {
            "title": "Theme names to reuse (optional)",
            "type": "array",
            "description": "Theme names from an earlier run (the `taxonomy` field of a place or app summary), e.g. Wait Times, Cleanliness, Staff Attitude, or Crashes, Missing Features for an app. Reviews are grouped into these names first, so reports from different runs compare one to one.",
            "items": {
              "type": "string"
            }
          },
          "allowNewThemes": {
            "title": "Allow new themes",
            "type": "boolean",
            "description": "With theme names given above: allow new themes for topics that fit none of them. Off = leftovers go to Other issues / Other praise.",
            "default": true
          },
          "businessContext": {
            "title": "About your business or app (optional)",
            "type": "string",
            "description": "A sentence or two used in the analysis and reply drafts, e.g. \"Family-run cafe, open 7-15. Contact: hello@example.com\" or \"Language learning app. Support: help@example.com\". Up to 600 characters."
          },
          "defaultPlaceName": {
            "title": "Place name for rows without one",
            "type": "string",
            "description": "Used when an item has no place name (common in CSV exports of a single location). App reviews use the app's store name, or its app ID when the name can't be looked up.",
            "default": "My business"
          },
          "replyTo": {
            "title": "Write reply drafts for",
            "enum": [
              "none",
              "negative",
              "unanswered",
              "all"
            ],
            "type": "string",
            "description": "Draft replies cost a separate event each. The Actor never posts anything: you review and post the drafts yourself. Google Play replies are kept within the store's 350-character limit. App Store exports don't say whether you already replied, so every App Store review counts as unanswered.",
            "default": "unanswered"
          },
          "replyLanguage": {
            "title": "Reply language",
            "type": "string",
            "description": "\"auto\" answers in the language of each review; or name a language, e.g. English, German.",
            "default": "auto"
          },
          "replySignature": {
            "title": "Reply sign-off",
            "type": "string",
            "description": "Line that ends every reply, e.g. \"— The Harbor Street Cafe team\". Up to 80 characters; it counts toward the Google Play 350-character limit."
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}