{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://artifacts.apis.io/cloudmersive/json-schema/cloudmersive-multi-threat-text-request-schema.json",
  "title": "MultiThreatTextRequest",
  "description": "Request to scan text for multiple threat types",
  "x-generated": "2026-11-05",
  "x-method": "derived",
  "x-generator": "derive-json-schema.py",
  "x-source": "openapi/cloudmersive-multithreatscan-api-openapi.yml#/components/schemas/MultiThreatTextRequest",
  "type": "object",
  "properties": {
    "TextContent": {
      "description": "The text content to scan",
      "type": "string"
    },
    "VirusScan": {
      "$ref": "#/$defs/VirusScanConfig"
    },
    "PhishingDetection": {
      "$ref": "#/$defs/PhishingDetectionTextConfig"
    },
    "SpamDetection": {
      "$ref": "#/$defs/SpamDetectionConfig"
    },
    "DlpDetection": {
      "$ref": "#/$defs/DlpDetectionConfig"
    },
    "PolicyEnforcement": {
      "$ref": "#/$defs/PolicyEnforcementConfig"
    },
    "PromptInjectionDetection": {
      "$ref": "#/$defs/PromptInjectionDetectionConfig"
    },
    "Provenance": {
      "$ref": "#/$defs/ProvenanceInfo"
    },
    "CustomPolicyID": {
      "description": "Optional ID (GUID) of a Multi-Threat Text Scanning Custom Policy created in the Cloudmersive Management Portal under Custom Policies. When set and retrievable, the policy's scan settings REPLACE the detection configurations in this request; the settings in this request are used only if the policy cannot be retrieved. Requires Managed Instance or Private Cloud.",
      "type": "string"
    }
  },
  "additionalProperties": false,
  "$defs": {
    "DlpDetectionConfig": {
      "description": "DLP (PII/PHI) detection configuration for text scanning",
      "type": "object",
      "properties": {
        "OutcomeAction": {
          "description": "Outcome action for this category: \"Block\" (default) sets the overall CleanResult to false when this category is not clean; \"Detection\" runs the category asynchronously after the response returns (findings appear in scan telemetry only, subject to Limits.DetectionSamplingRate); \"DetectionSync\" runs it inline and reports its result in the response without affecting the overall CleanResult.",
          "type": "string"
        },
        "Enabled": {
          "description": "Enable DLP detection",
          "type": "boolean"
        },
        "AllowEmailAddresses": {
          "description": "Allow email addresses",
          "type": "boolean"
        },
        "AllowPhoneNumbers": {
          "description": "Allow phone numbers",
          "type": "boolean"
        },
        "AllowStreetAddresses": {
          "description": "Allow street addresses",
          "type": "boolean"
        },
        "AllowPersonNames": {
          "description": "Allow person names",
          "type": "boolean"
        },
        "AllowBirthDates": {
          "description": "Allow birth dates",
          "type": "boolean"
        },
        "AllowPassportNumbers": {
          "description": "Allow passport numbers",
          "type": "boolean"
        },
        "AllowDriversLicenses": {
          "description": "Allow driver's licenses",
          "type": "boolean"
        },
        "AllowSocialSecurityNumbers": {
          "description": "Allow Social Security numbers",
          "type": "boolean"
        },
        "AllowTaxpayerIds": {
          "description": "Allow taxpayer IDs",
          "type": "boolean"
        },
        "AllowCreditCardNumbers": {
          "description": "Allow credit card numbers",
          "type": "boolean"
        },
        "AllowBankAccountNumbers": {
          "description": "Allow bank account numbers",
          "type": "boolean"
        },
        "AllowIbans": {
          "description": "Allow IBANs",
          "type": "boolean"
        },
        "AllowHealthInsuranceNumbers": {
          "description": "Allow health insurance numbers",
          "type": "boolean"
        },
        "AllowBearerTokens": {
          "description": "Allow bearer tokens",
          "type": "boolean"
        },
        "AllowHttpCookies": {
          "description": "Allow HTTP cookies",
          "type": "boolean"
        },
        "AllowPrivateKeys": {
          "description": "Allow private keys",
          "type": "boolean"
        },
        "AllowCredentials": {
          "description": "Allow credentials",
          "type": "boolean"
        },
        "AllowDeepWebUrls": {
          "description": "Allow deep web URLs",
          "type": "boolean"
        },
        "AllowSourceCode": {
          "description": "Allow source code",
          "type": "boolean"
        },
        "AllowIpAddresses": {
          "description": "Allow IP addresses",
          "type": "boolean"
        },
        "AllowMacAddresses": {
          "description": "Allow MAC addresses",
          "type": "boolean"
        },
        "AllowHealthInsuranceMemberIds": {
          "description": "Allow health insurance member IDs",
          "type": "boolean"
        },
        "AllowInjuryDiseaseReferences": {
          "description": "Allow injury/disease references",
          "type": "boolean"
        },
        "AllowTreatmentTypeDescriptions": {
          "description": "Allow treatment type descriptions",
          "type": "boolean"
        },
        "AllowMedicalTreatmentDates": {
          "description": "Allow medical treatment dates",
          "type": "boolean"
        },
        "AllowHealthPlanBeneficiaryNumbers": {
          "description": "Allow health plan beneficiary numbers",
          "type": "boolean"
        },
        "AllowTreatmentPayments": {
          "description": "Allow treatment payments",
          "type": "boolean"
        },
        "AllowVehicleIds": {
          "description": "Allow vehicle IDs",
          "type": "boolean"
        },
        "AllowDeviceIds": {
          "description": "Allow device IDs",
          "type": "boolean"
        },
        "ProvideAnalysisRationale": {
          "description": "Provide analysis rationale",
          "type": "boolean"
        },
        "CustomPolicyID": {
          "description": "Custom policy ID",
          "type": "string"
        }
      },
      "additionalProperties": false
    },
    "PhishingDetectionTextConfig": {
      "description": "Phishing detection configuration for text scanning",
      "type": "object",
      "properties": {
        "OutcomeAction": {
          "description": "Outcome action for this category: \"Block\" (default) sets the overall CleanResult to false when this category is not clean; \"Detection\" runs the category asynchronously after the response returns (findings appear in scan telemetry only, subject to Limits.DetectionSamplingRate); \"DetectionSync\" runs it inline and reports its result in the response without affecting the overall CleanResult.",
          "type": "string"
        },
        "Enabled": {
          "description": "Enable phishing detection",
          "type": "boolean"
        },
        "Mode": {
          "description": "Detection pipeline: \"Basic\" (local URL-reputation analysis, default) or \"Advanced\" (remote AI phishing analysis).",
          "type": "string"
        },
        "TextType": {
          "description": "Type of text: TextMessage, UserMessage, SalesLead, EmailMessage, SupportCase, AppMessage, Other. Applies to Advanced mode only.",
          "type": "string"
        },
        "Model": {
          "description": "Model to use: Normal or Advanced",
          "type": "string"
        },
        "AllowUnsolicitedSales": {
          "description": "Allow unsolicited sales content",
          "type": "boolean"
        },
        "AllowPromotionalContent": {
          "description": "Allow promotional content",
          "type": "boolean"
        },
        "AllowWebUrls": {
          "description": "Allow web URLs in content",
          "type": "boolean"
        },
        "AllowPhoneNumbers": {
          "description": "Allow phone numbers in content",
          "type": "boolean"
        },
        "AllowEmailAddresses": {
          "description": "Allow email addresses in content",
          "type": "boolean"
        },
        "ProvideUrlAnalysis": {
          "description": "Provide URL analysis details",
          "type": "boolean"
        },
        "CustomPolicyID": {
          "description": "Custom policy ID for managed instances",
          "type": "string"
        },
        "ProvideAnalysisRationale": {
          "description": "Provide analysis rationale in response",
          "type": "boolean"
        },
        "FromName": {
          "description": "Name of the sender",
          "type": "string"
        },
        "ToName": {
          "description": "Name of the recipient",
          "type": "string"
        },
        "FromPhoneNumber": {
          "description": "Phone number of the sender",
          "type": "string"
        },
        "ToPhoneNumber": {
          "description": "Phone number of the recipient",
          "type": "string"
        },
        "FromEmailAddress": {
          "description": "Email address of the sender",
          "type": "string"
        },
        "ToEmailAddress": {
          "description": "Email address of the recipient",
          "type": "string"
        }
      },
      "additionalProperties": false
    },
    "PolicyEnforcementConfig": {
      "description": "Policy enforcement configuration with custom rules",
      "type": "object",
      "properties": {
        "OutcomeAction": {
          "description": "Outcome action for this category: \"Block\" (default) sets the overall CleanResult to false when this category is not clean; \"Detection\" runs the category asynchronously after the response returns (findings appear in scan telemetry only, subject to Limits.DetectionSamplingRate); \"DetectionSync\" runs it inline and reports its result in the response without affecting the overall CleanResult.",
          "type": "string"
        },
        "Enabled": {
          "description": "Enable policy enforcement",
          "type": "boolean"
        },
        "Rules": {
          "description": "List of policy rules to enforce",
          "type": "array",
          "items": {
            "$ref": "#/$defs/PolicyRule"
          }
        },
        "CustomPolicyID": {
          "description": "Optional ID (GUID) of a Custom Policy created in the Cloudmersive Management Portal whose ALLOW and BLOCK rules are enforced as content rules. Used only when Rules is not supplied; when both are present, Rules takes precedence. Requires Managed Instance or Private Cloud.",
          "type": "string"
        }
      },
      "additionalProperties": false
    },
    "PolicyRule": {
      "description": "A single policy rule",
      "type": "object",
      "properties": {
        "RuleId": {
          "description": "Unique rule identifier",
          "type": "string"
        },
        "RuleType": {
          "description": "Rule type: ALLOW or DENY",
          "type": "string"
        },
        "RuleDescription": {
          "description": "Natural language description of the policy rule",
          "type": "string"
        }
      },
      "additionalProperties": false
    },
    "PromptInjectionDetectionConfig": {
      "description": "Prompt injection detection configuration for a URL scan (Spec/UrlPromptInjectionDetection.md).\nDisabled by default.",
      "type": "object",
      "properties": {
        "OutcomeAction": {
          "description": "Outcome action for this category: \"Block\" (default) sets the overall CleanResult to false when this category is not clean; \"Detection\" runs the category asynchronously after the response returns (findings appear in scan telemetry only, subject to Limits.DetectionSamplingRate); \"DetectionSync\" runs it inline and reports its result in the response without affecting the overall CleanResult.",
          "type": "string"
        },
        "Enabled": {
          "description": "Enable prompt injection detection. Default false.",
          "type": "boolean"
        },
        "MinimumRiskLevel": {
          "description": "Optional additional strictness: \"Medium\" or \"High\". When set, content whose RiskLevel is at or above this level is flagged IN ADDITION to the detection service's own verdict (this setting can only add flags, never remove them). Unset uses the detection service's verdict exactly.",
          "type": "string"
        }
      },
      "additionalProperties": false
    },
    "ProvenanceInfo": {
      "description": "Caller-supplied provenance describing where the input file came from\n(Spec/ProvenanceFields.md §3.7). Values are opaque caller data: echoed back in the\nscan result, never validated against the source system, and never used in scan logic.\nOn the cloud-storage endpoints, source-derived provenance takes precedence\nfield-by-field; these values fill only the fields the source could not provide.",
      "type": "object",
      "properties": {
        "ProvenanceURL": {
          "description": "Fully-qualified URL or path of the source object, such as an https:// cloud storage URL or a file:// path for a network share file.",
          "type": "string"
        },
        "ProvenanceUser": {
          "description": "User who last modified or created the source object.",
          "type": "string"
        },
        "ProvenanceCreationDate": {
          "format": "date-time",
          "description": "Creation date and time (UTC) of the source object.",
          "type": "string"
        },
        "ProvenanceModifiedDate": {
          "format": "date-time",
          "description": "Last-modified date and time (UTC) of the source object.",
          "type": "string"
        },
        "ProvenanceZoneIdentifier": {
          "description": "Mark of the Web (Zone.Identifier) information for the source file, when available; may include the URL the file was originally downloaded from.",
          "type": "string"
        },
        "ProvenanceTransactionID": {
          "description": "Caller-assigned transaction identifier for the scan, useful for correlating the scan result with the caller's own systems.",
          "type": "string"
        },
        "ProvenanceClientIP": {
          "description": "IP address of the client that originated the source content or scan request.",
          "type": "string"
        }
      },
      "additionalProperties": false
    },
    "SpamDetectionConfig": {
      "description": "Spam detection configuration",
      "type": "object",
      "properties": {
        "OutcomeAction": {
          "description": "Outcome action for this category: \"Block\" (default) sets the overall CleanResult to false when this category is not clean; \"Detection\" runs the category asynchronously after the response returns (findings appear in scan telemetry only, subject to Limits.DetectionSamplingRate); \"DetectionSync\" runs it inline and reports its result in the response without affecting the overall CleanResult.",
          "type": "string"
        },
        "Enabled": {
          "description": "Enable spam detection",
          "type": "boolean"
        },
        "Model": {
          "description": "Model to use: Normal or Advanced",
          "type": "string"
        },
        "AllowUnsolicitedSales": {
          "description": "Allow unsolicited sales content",
          "type": "boolean"
        },
        "AllowPromotionalContent": {
          "description": "Allow promotional content",
          "type": "boolean"
        },
        "AllowPhishing": {
          "description": "Allow phishing content",
          "type": "boolean"
        },
        "CustomPolicyID": {
          "description": "Optional ID (GUID) of a Spam Detection Custom Policy created in the Cloudmersive Management Portal, applied by the underlying Spam Detection API.",
          "type": "string"
        }
      },
      "additionalProperties": false
    },
    "VirusScanConfig": {
      "description": "Virus scan configuration",
      "type": "object",
      "properties": {
        "Enabled": {
          "description": "Enable virus scanning",
          "type": "boolean"
        },
        "AllowExecutables": {
          "description": "Allow executable files",
          "type": "boolean"
        },
        "AllowInvalidFiles": {
          "description": "Allow invalid files",
          "type": "boolean"
        },
        "AllowScripts": {
          "description": "Allow script files",
          "type": "boolean"
        },
        "AllowPasswordProtectedFiles": {
          "description": "Allow password-protected files",
          "type": "boolean"
        },
        "AllowMacros": {
          "description": "Allow files containing macros",
          "type": "boolean"
        },
        "AllowXmlExternalEntities": {
          "description": "Allow XML external entities",
          "type": "boolean"
        },
        "AllowInsecureDeserialization": {
          "description": "Allow insecure deserialization",
          "type": "boolean"
        },
        "AllowHtml": {
          "description": "Allow HTML content",
          "type": "boolean"
        },
        "AllowUnsafeArchives": {
          "description": "Allow unsafe archives",
          "type": "boolean"
        },
        "AllowOleEmbeddedObject": {
          "description": "Allow OLE embedded objects",
          "type": "boolean"
        },
        "AllowUnwantedAction": {
          "description": "Allow unwanted actions",
          "type": "boolean"
        },
        "AllowAuthenticodeSignedExecutables": {
          "description": "Allow an executable that carries an Authenticode signature meeting MinimumAuthenticodeSigningLevel, even when AllowExecutables is false. Default false, in which case scanning behaves exactly as it does without this setting. PE files (.exe/.dll/.sys) only — a signed .msi is still blocked.",
          "type": "boolean"
        },
        "MinimumAuthenticodeSigningLevel": {
          "description": "Minimum Authenticode signing level an executable must meet to be allowed by AllowAuthenticodeSignedExecutables. Currently only \"Signed\" is supported, which asserts a well-formed signature is present — NOT that the signer is trusted; a self-signed executable qualifies.",
          "type": "string"
        },
        "RestrictFileTypes": {
          "description": "Restrict to specific file types (comma-separated extensions)",
          "type": "string"
        },
        "Options": {
          "description": "Comma-separated scan options",
          "type": "string"
        }
      },
      "additionalProperties": false
    }
  }
}