{
  "openapi": "3.0.1",
  "info": {
    "title": "WordPress Plugin Reviews Scraper & Support Monitor",
    "description": "Scrape WordPress.org plugin reviews and support forum topics. Export ratings, review text, replies, and resolution status. Monitor new reviews, unanswered questions, and topic changes across multiple plugins. No WordPress login or API key required.",
    "version": "1.0",
    "x-build-id": "k0wrGp93WxZbI7U5Q"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/coolinbex~wordpress-plugin-reviews-support-monitor/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-coolinbex-wordpress-plugin-reviews-support-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/coolinbex~wordpress-plugin-reviews-support-monitor/runs": {
      "post": {
        "operationId": "runs-sync-coolinbex-wordpress-plugin-reviews-support-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/coolinbex~wordpress-plugin-reviews-support-monitor/run-sync": {
      "post": {
        "operationId": "run-sync-coolinbex-wordpress-plugin-reviews-support-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": [
          "plugins"
        ],
        "properties": {
          "plugins": {
            "title": "WordPress plugins",
            "minItems": 1,
            "maxItems": 20,
            "type": "array",
            "description": "Plugin slugs or official WordPress.org plugin URLs. Up to 20 plugins; duplicates are removed.",
            "items": {
              "type": "string"
            }
          },
          "sources": {
            "title": "Data to collect",
            "enum": [
              "both",
              "reviews",
              "support"
            ],
            "type": "string",
            "description": "Scrape reviews, support topics, or both.",
            "default": "both"
          },
          "mode": {
            "title": "Run mode",
            "enum": [
              "scrape",
              "monitor"
            ],
            "type": "string",
            "description": "Scrape returns matching snapshots. Monitor compares against a saved baseline and returns new or changed matching topics.",
            "default": "scrape"
          },
          "monitorKey": {
            "title": "Monitor name",
            "pattern": "^[a-zA-Z0-9_-]{1,64}$",
            "type": "string",
            "description": "Give each independent monitor a stable name. Keep this name and settings unchanged on scheduled runs. Used only in monitor mode.",
            "default": "default"
          },
          "firstRun": {
            "title": "First monitor run",
            "enum": [
              "emit",
              "silent"
            ],
            "type": "string",
            "description": "Emit baseline outputs existing matching topics on the first successful run. Silent baseline saves current topics without emitting them.",
            "default": "emit"
          },
          "maxTopicsPerSource": {
            "title": "Topics per plugin and source",
            "minimum": 1,
            "maximum": 1000,
            "type": "integer",
            "description": "Maximum topics examined for each plugin/source, BEFORE filters. Both sources means up to twice this number per plugin. Results follow the source listing order.",
            "default": 50
          },
          "maxTopicsTotal": {
            "title": "Total topics across all plugins",
            "minimum": 1,
            "maximum": 5000,
            "type": "integer",
            "description": "Maximum topics examined across the run, BEFORE filters. Earlier plugins run first; sources skipped by this cap are reported in SUMMARY.",
            "default": 500
          },
          "maxListingPages": {
            "title": "Listing pages per source",
            "minimum": 1,
            "maximum": 100,
            "type": "integer",
            "description": "Safety cap for listing pagination. SUMMARY reports when more pages exist. Changes outside the scanned window are not detected.",
            "default": 5
          },
          "includeReplies": {
            "title": "Include reply text",
            "type": "boolean",
            "description": "Include public replies and plugin-author/support badges. Disable for lower output volume; topic details are still fetched.",
            "default": true
          },
          "maxRepliesPerTopic": {
            "title": "Replies per topic",
            "minimum": 0,
            "maximum": 500,
            "type": "integer",
            "description": "Maximum reply bodies returned per topic, in source order. Zero disables reply bodies. repliesTruncated flags incomplete coverage.",
            "default": 50
          },
          "maxReplyPages": {
            "title": "Reply pages per topic",
            "minimum": 1,
            "maximum": 25,
            "type": "integer",
            "description": "Maximum pages of replies fetched per topic, including its first page. Truncation is explicit.",
            "default": 3
          },
          "includePinnedTopics": {
            "title": "Include pinned topics",
            "type": "boolean",
            "description": "Include sticky announcements. Disabled by default so old pinned posts do not consume the topic limit.",
            "default": false
          },
          "reviewStars": {
            "title": "Review star ratings",
            "maxItems": 5,
            "type": "array",
            "description": "Leave empty for all reviews. Select ratings from 1 to 5. Does not filter support topics.",
            "items": {
              "type": "string",
              "enum": [
                "1",
                "2",
                "3",
                "4",
                "5"
              ]
            },
            "default": []
          },
          "supportStatus": {
            "title": "Support topic filter",
            "enum": [
              "all",
              "unresolved",
              "resolved",
              "no_replies"
            ],
            "type": "string",
            "description": "Unresolved and resolved use the explicit WordPress status. No replies means zero replies, regardless of closed/resolved status. Reviews are unaffected.",
            "default": "all"
          },
          "keywords": {
            "title": "Include keywords",
            "maxItems": 30,
            "type": "array",
            "description": "Case-insensitive literal phrases. Match ANY phrase in the original title or body, excluding replies. Leave empty for all.",
            "items": {
              "type": "string"
            },
            "default": []
          },
          "excludeKeywords": {
            "title": "Exclude keywords",
            "maxItems": 30,
            "type": "array",
            "description": "Exclude topics containing ANY of these literal phrases in the original title or body.",
            "items": {
              "type": "string"
            },
            "default": []
          },
          "since": {
            "title": "Activity since (UTC)",
            "type": "string",
            "description": "Optional YYYY-MM-DD or ISO timestamp with timezone. Filters by LAST ACTIVITY, not creation date. Empty means no date filter.",
            "default": ""
          },
          "requestDelayMillis": {
            "title": "Delay between request starts (ms)",
            "minimum": 500,
            "maximum": 10000,
            "type": "integer",
            "description": "Global minimum spacing between WordPress requests. At most two topic requests run concurrently.",
            "default": 750
          },
          "requestTimeoutSecs": {
            "title": "Request timeout (seconds)",
            "minimum": 10,
            "maximum": 120,
            "type": "integer",
            "description": "Timeout per HTTP attempt.",
            "default": 30
          },
          "maxRetries": {
            "title": "Retries per request",
            "minimum": 0,
            "maximum": 5,
            "type": "integer",
            "description": "Retries for network errors, temporary server errors and blocking, using backoff and bounded Retry-After handling.",
            "default": 3
          },
          "maxRequests": {
            "title": "Maximum HTTP requests",
            "minimum": 1,
            "maximum": 20000,
            "type": "integer",
            "description": "Hard request budget including retries and redirects. Exceeding this fails clearly and preserves the previous monitor baseline.",
            "default": 5000
          },
          "proxyConfiguration": {
            "title": "Proxy configuration (optional)",
            "type": "object",
            "description": "Direct requests work without a paid external API. If WordPress blocks your runtime IP, configure an Apify or custom proxy. Proxy usage may add platform costs.",
            "default": {
              "useApifyProxy": false
            }
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}