{
  "openapi": "3.0.1",
  "info": {
    "title": "AI Content Detector — Turnitin Alternative",
    "description": "Check English prose for AI-writing signals. Submit text and receive a provider signal, review band, optional sentence highlights, and human-review guidance in one report per text. Results are screening cues, not proof of authorship.",
    "version": "0.1",
    "x-build-id": "rM9YagE0A7VtpFRoh"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/khadinakbar~turnitin-ai-detector-alternative/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-khadinakbar-turnitin-ai-detector-alternative",
        "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/khadinakbar~turnitin-ai-detector-alternative/runs": {
      "post": {
        "operationId": "runs-sync-khadinakbar-turnitin-ai-detector-alternative",
        "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/khadinakbar~turnitin-ai-detector-alternative/run-sync": {
      "post": {
        "operationId": "run-sync-khadinakbar-turnitin-ai-detector-alternative",
        "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": {
          "texts": {
            "title": "Writing to pre-screen",
            "maxItems": 10,
            "type": "array",
            "description": "One or more intact English prose sections, one string per report. The default pre-screen profile accepts 300-3,000 words per item and rejects truncated or out-of-range text before calling the provider. Use one clearly labelled section per item so a reviewer can trace the resulting row. This is pasted text only, not a file upload or URL.",
            "items": {
              "type": "string"
            },
            "default": []
          },
          "text": {
            "title": "Single writing section (optional)",
            "type": "string",
            "description": "Optional shortcut for one pasted writing section. It is combined with texts when both are supplied. Under the default profile, provide an intact 300-3,000-word English prose section; short notes, titles, and oversized documents are declined without a provider request. Leave this empty when you use the texts list.",
            "default": ""
          },
          "reviewProfile": {
            "title": "Review profile",
            "enum": [
              "turnitin-pre-screen",
              "general"
            ],
            "type": "string",
            "description": "Turnitin-alternative pre-screen is the safe default: it enforces a 300-3,000-word range, suppresses low-signal exact percentages, and adds mandatory human-review guidance. General keeps the same independent provider but allows shorter non-academic copy and does not apply that review band. Neither profile is Turnitin or a misconduct decision.",
            "default": "turnitin-pre-screen"
          },
          "maxTexts": {
            "title": "Maximum reports this run",
            "minimum": 1,
            "maximum": 10,
            "type": "integer",
            "description": "Hard cap on scored documents for this run. Default 1 keeps review queues and event charges predictable; raise it only for separate, authorised sections. This limits volume and cost, not how a provider calculates an individual score. Items outside the selected profile's eligibility rules stop the run before any provider request.",
            "default": 1
          },
          "maxCharacters": {
            "title": "Maximum characters per section",
            "minimum": 300,
            "maximum": 30000,
            "type": "integer",
            "description": "Character cap applied before scoring. Default 20,000 preserves most 3,000-word prose sections; the Actor declines anything it would truncate in the default pre-screen profile. Raise up to 30,000 only when the complete text still fits the 3,000-word maximum. Split longer work into labelled sections rather than silently clipping it.",
            "default": 20000
          },
          "includeSentences": {
            "title": "Include provider-highlighted sentences",
            "type": "boolean",
            "description": "When enabled, the dataset includes sentence-level highlights returned by the independent provider. These highlights are review cues, not a finding that a sentence was AI-written. Turn this off when your workflow only needs the document score and review band. It does not alter the report event price.",
            "default": true
          },
          "includeTextPreview": {
            "title": "Store a short text preview",
            "type": "boolean",
            "description": "When enabled, each row contains the leading characters of the text so a reviewer can match the report to a source section. It is off by default for privacy-sensitive queues. The full submitted section still has to be sent to the detection provider for scoring. Do not submit personal, confidential, or restricted writing unless you are authorised to process it.",
            "default": false
          },
          "aiThreshold": {
            "title": "High-signal classification threshold",
            "minimum": 50,
            "maximum": 99,
            "type": "integer",
            "description": "Provider AI percentage at or above this value receives classification=ai. Default 80 is a routing threshold for a human review queue, not an authorship conclusion. Values between the human and AI thresholds are labelled mixed. The review profile still supplies its own cautious reviewBand.",
            "default": 80
          },
          "humanThreshold": {
            "title": "Low-signal classification threshold",
            "minimum": 1,
            "maximum": 49,
            "type": "integer",
            "description": "Provider AI percentage at or below this value receives classification=human. Default 20; values in the middle are mixed. In the default pre-screen profile, a non-zero 1-19% result is intentionally withheld as an exact displayed percentage and marked low-signal. This setting does not alter the underlying provider score.",
            "default": 20
          },
          "maxConcurrency": {
            "title": "Maximum concurrent provider requests",
            "minimum": 1,
            "maximum": 3,
            "type": "integer",
            "description": "How many reports may be sent to the provider at once. Default 1 prioritises stable, observable pre-screens; use 2 or 3 only after your own volume test is healthy. Retryable provider errors are retried with backoff. Each successfully saved report still creates one primary usage event.",
            "default": 1
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}