{
  "openapi": "3.0.1",
  "info": {
    "title": "Content Style & Brand Voice Checker",
    "description": "Audit website copy, documentation, Markdown, HTML, and direct text with Vale. Detect editorial style and terminology issues, enforce brand language, and export structured reports in bulk.",
    "version": "0.1",
    "x-build-id": "DzVeh1TYj8hT7KbnT"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/datascraperes~website-content-style-brand-terminology-checker/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-datascraperes-website-content-style-brand-terminology-checker",
        "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/datascraperes~website-content-style-brand-terminology-checker/runs": {
      "post": {
        "operationId": "runs-sync-datascraperes-website-content-style-brand-terminology-checker",
        "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/datascraperes~website-content-style-brand-terminology-checker/run-sync": {
      "post": {
        "operationId": "run-sync-datascraperes-website-content-style-brand-terminology-checker",
        "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": {
          "urls": {
            "title": "Public page URLs",
            "type": "array",
            "description": "Enter one complete public HTTP or HTTPS URL per line. The Actor accepts server-rendered HTML and text/plain pages, follows up to 5 public redirects, extracts readable content, and does not execute page JavaScript. Exact duplicate URLs are trimmed and analyzed once. Every URL produces its own succeeded or failed Dataset row; failed URLs are not charged. URLs and direct text documents combined cannot exceed 500.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "texts": {
            "title": "Direct text documents",
            "type": "array",
            "description": "Enter a JSON array of document objects. Each object requires a non-empty text field and can include an id plus format. Example: [{\"id\":\"homepage\",\"format\":\"markdown\",\"text\":\"# Welcome\\nYour content here.\"}]. Supported formats are text, markdown, html, rst, asciidoc, and xml; format defaults to text and id is generated when omitted. Each document can contain up to 2,000,000 characters and counts toward the 500-document run limit. Finding line numbers refer to this original supplied content.",
            "default": []
          },
          "style": {
            "title": "Style preset",
            "enum": [
              "technical",
              "marketing",
              "minimal"
            ],
            "type": "string",
            "description": "Choose the editorial rule set applied to every document. Technical applies Google documentation-style rules plus sentence-length and terminology checks. Marketing applies write-good readability rules plus sentence-length and terminology checks. Minimal applies only sentence-length and your terminology rules, making it the least opinionated option. This choice changes findings, not URL extraction or billing.",
            "default": "technical"
          },
          "requiredTerms": {
            "title": "Required terms",
            "type": "array",
            "description": "Enter one literal term or phrase per line that must appear in every analyzed document. Matching is case-insensitive and checks literal text, including substrings; it is not a regular expression or whole-word rule. Each missing entry adds one document-level error. You can provide up to 500 non-empty entries of at most 200 characters each. Leave empty when no terminology is mandatory.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "preferredCaseTerms": {
            "title": "Preferred capitalization",
            "type": "array",
            "description": "Enter the canonical spelling and capitalization of product names, acronyms, or branded terms, one per line. For example, Apify causes the lowercase form apify to be reported with a recommendation to use Apify, while the exact preferred spelling is accepted. Values are treated as literal text, not regular expressions. Up to 500 non-empty entries of at most 200 characters are accepted. The defaults can be edited or cleared if they do not apply to your content.",
            "default": [
              "Apify",
              "Actor",
              "Dataset",
              "API"
            ],
            "items": {
              "type": "string"
            }
          },
          "forbiddenTerms": {
            "title": "Forbidden terms and replacements",
            "type": "array",
            "description": "Enter a JSON array of objects containing term and, optionally, replacement. Example: [{\"term\":\"blacklist\",\"replacement\":\"blocklist\"},{\"term\":\"simply\"}]. The term is matched as literal text, never as a regular expression. A replacement makes the warning recommend that wording; without one, the Actor only reports that the term should be avoided. Up to 500 objects are accepted, with terms and replacements limited to 200 characters.",
            "default": []
          },
          "forbiddenPhrases": {
            "title": "Forbidden phrases",
            "type": "array",
            "description": "Enter one literal word or multi-word phrase per line. Matching is case-insensitive, and characters such as ., *, +, ?, or brackets are treated literally rather than as regular-expression syntax. Each occurrence produces a warning. Use this for banned slogans, filler phrases, or wording that has no replacement. Up to 500 non-empty entries of at most 200 characters are accepted.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "fetchTimeoutSeconds": {
            "title": "Fetch timeout per request",
            "minimum": 1,
            "maximum": 60,
            "type": "integer",
            "description": "Maximum waiting time for each URL request, from 1 to 60 seconds. The default 10 seconds is suitable for most public pages. Increase it only for consistently slow sites; doing so can make a run take longer when a server is unavailable. A timeout affects only that URL, which receives a free failed Dataset row while other documents continue.",
            "default": 10
          },
          "maxDownloadMb": {
            "title": "Maximum download per URL",
            "minimum": 1,
            "maximum": 9,
            "type": "integer",
            "description": "Maximum response body downloaded from each URL, from 1 to 9 MiB. The default 1 MiB is enough for most article and documentation pages and limits memory use. Increase it only when valid text pages are being rejected for size. A page exceeding the limit becomes a free failed row; this setting does not limit direct text documents.",
            "default": 1
          },
          "analysisBatchSize": {
            "title": "URL analysis batch size",
            "minimum": 1,
            "maximum": 100,
            "type": "integer",
            "description": "Number of successfully fetched URL documents retained for each Vale analysis pass, from 1 to 100. Keep the recommended default of 10 for balanced memory usage. Lower values reduce peak memory for unusually large pages but require more analysis passes; higher values may improve throughput for many small pages while using more memory. This setting changes batching only and does not change findings, prices, or the 500-document limit.",
            "default": 10
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}