# Models

## The ErrorResponse object

```json
{"openapi":"3.1.0","info":{"title":"Protege External Review API","version":"1.0.1"},"components":{"schemas":{"ErrorResponse":{"description":"Standard error envelope returned when a request cannot be fulfilled.","type":"object","required":["error"],"properties":{"error":{"type":"string","description":"Human-readable explanation of the failure."}}}}}}
```

## The ReviewMode object

```json
{"openapi":"3.1.0","info":{"title":"Protege External Review API","version":"1.0.1"},"components":{"schemas":{"ReviewMode":{"description":"Controls whether the review should complete inline or be queued for background processing.","type":"string","enum":["sync","async"],"default":"sync"}}}}
```

## The ReviewStatus object

```json
{"openapi":"3.1.0","info":{"title":"Protege External Review API","version":"1.0.1"},"components":{"schemas":{"ReviewStatus":{"description":"Current processing state of a submitted document review.","type":"string","enum":["queued","processing","completed","failed"]}}}}
```

## The TextReviewDocument object

```json
{"openapi":"3.1.0","info":{"title":"Protege External Review API","version":"1.0.1"},"components":{"schemas":{"TextReviewDocument":{"description":"Plain-text document content submitted directly in the JSON request body.","type":"object","required":["type","text"],"properties":{"type":{"type":"string","enum":["text"],"description":"Identifies the document payload type."},"title":{"type":"string","description":"Client-friendly document title shown in review metadata."},"externalId":{"type":"string","description":"Client-supplied identifier used to correlate Protege reviews with your own records."},"text":{"type":"string","description":"Full plain-text content to review."},"metadata":{"type":"object","description":"Optional client-defined metadata that Protege stores with the review.","additionalProperties":true}}}}}}
```

## The TextReviewRequest object

```json
{"openapi":"3.1.0","info":{"title":"Protege External Review API","version":"1.0.1"},"components":{"schemas":{"TextReviewRequest":{"description":"JSON request body for creating a review from plain text content.","type":"object","required":["documentEvaluationTypeId","document"],"properties":{"mode":{"$ref":"#/components/schemas/ReviewMode"},"documentEvaluationTypeId":{"type":"string","format":"uuid","description":"Identifier of the review configuration to apply."},"document":{"$ref":"#/components/schemas/TextReviewDocument"}}},"ReviewMode":{"description":"Controls whether the review should complete inline or be queued for background processing.","type":"string","enum":["sync","async"],"default":"sync"},"TextReviewDocument":{"description":"Plain-text document content submitted directly in the JSON request body.","type":"object","required":["type","text"],"properties":{"type":{"type":"string","enum":["text"],"description":"Identifies the document payload type."},"title":{"type":"string","description":"Client-friendly document title shown in review metadata."},"externalId":{"type":"string","description":"Client-supplied identifier used to correlate Protege reviews with your own records."},"text":{"type":"string","description":"Full plain-text content to review."},"metadata":{"type":"object","description":"Optional client-defined metadata that Protege stores with the review.","additionalProperties":true}}}}}}
```

## The MultipartFileReviewRequest object

```json
{"openapi":"3.1.0","info":{"title":"Protege External Review API","version":"1.0.1"},"components":{"schemas":{"MultipartFileReviewRequest":{"description":"Multipart form payload for uploading a single file to review.","type":"object","required":["documentEvaluationTypeId","file"],"properties":{"mode":{"$ref":"#/components/schemas/ReviewMode"},"documentEvaluationTypeId":{"type":"string","format":"uuid","description":"Identifier of the review configuration to apply."},"title":{"type":"string","description":"Optional title to associate with the uploaded document."},"externalId":{"type":"string","description":"Client-supplied identifier used for downstream reconciliation."},"metadata":{"type":"string","description":"JSON-encoded object string for document metadata."},"file":{"type":"string","format":"binary","description":"Upload a single file. Supported types are `.docx`, `.pdf`, `.png`, `.jpg`, and `.jpeg`.\n"}}},"ReviewMode":{"description":"Controls whether the review should complete inline or be queued for background processing.","type":"string","enum":["sync","async"],"default":"sync"}}}}
```

## The PolicyRef object

```json
{"openapi":"3.1.0","info":{"title":"Protege External Review API","version":"1.0.1"},"components":{"schemas":{"PolicyRef":{"description":"Lightweight policy reference attached to a finding.","type":"object","required":["id","name"],"properties":{"id":{"type":"string","format":"uuid"},"name":{"type":"string"}}}}}}
```

## The TrademarkRef object

```json
{"openapi":"3.1.0","info":{"title":"Protege External Review API","version":"1.0.1"},"components":{"schemas":{"TrademarkRef":{"description":"Lightweight trademark reference attached to a finding.","type":"object","required":["id","name","proprietary"],"properties":{"id":{"type":"string","format":"uuid"},"name":{"type":"string"},"proprietary":{"type":"boolean"},"approval":{"oneOf":[{"type":"string"},{"type":"null"}]},"markType":{"oneOf":[{"type":"string"},{"type":"null"}]}}}}}}
```

## The Finding object

```json
{"openapi":"3.1.0","info":{"title":"Protege External Review API","version":"1.0.1"},"components":{"schemas":{"Finding":{"description":"Structured review output describing a policy, trademark, or claim-related issue found in the document. The populated fields depend on the `kind` value.\n","oneOf":[{"$ref":"#/components/schemas/PolicyFeedbackFinding"},{"$ref":"#/components/schemas/ClaimFinding"},{"$ref":"#/components/schemas/TrademarkInstanceFinding"}],"discriminator":{"propertyName":"kind","mapping":{"policy_feedback":"#/components/schemas/PolicyFeedbackFinding","claim":"#/components/schemas/ClaimFinding","trademark_instance":"#/components/schemas/TrademarkInstanceFinding"}}},"PolicyFeedbackFinding":{"description":"A finding produced by a policy evaluation, such as a brand compliance violation.","allOf":[{"$ref":"#/components/schemas/FindingBase"},{"type":"object","required":["policy","details"],"properties":{"policy":{"$ref":"#/components/schemas/PolicyRef"},"trademark":{"oneOf":[{"$ref":"#/components/schemas/TrademarkRef"},{"type":"null"}]},"details":{"type":"object","description":"Policy-specific detail payload.","properties":{"policyOutputId":{"oneOf":[{"type":"string"},{"type":"null"}],"description":"Identifier of the policy output that produced this finding."},"recommendation":{"oneOf":[{"type":"string"},{"type":"null"}],"description":"Actionable recommendation for resolving the finding."},"suggestions":{"type":"array","items":{"type":"string"},"description":"Suggested alternative text or actions for the finding."}}}}}]},"FindingBase":{"description":"Fields shared across every finding kind.","type":"object","required":["kind","text","comment","feedbackLocation","status","details"],"properties":{"kind":{"type":"string","enum":["policy_feedback","claim","trademark_instance"],"description":"Category of finding returned by Protege."},"text":{"oneOf":[{"type":"string"},{"type":"null"}],"description":"Text snippet or extracted value associated with the finding, when available."},"comment":{"oneOf":[{"type":"string"},{"type":"null"}],"description":"Reviewer-facing explanation of the issue or recommendation."},"riskLevel":{"oneOf":[{"type":"string"},{"type":"null"}],"description":"Severity or risk classification assigned by the review."},"feedbackLocation":{"type":"string","description":"Machine-readable indicator of the content medium where the finding was detected (e.g. 'text', 'image_ocr_text')."},"location":{"$ref":"#/components/schemas/FindingLocation"},"status":{"type":"string","description":"Resolution or approval status associated with the finding."},"approval":{"oneOf":[{"type":"string"},{"type":"null"}],"description":"Approval guidance for trademark-related findings, when applicable."},"metadata":{"oneOf":[{"type":"object"},{"type":"null"}],"description":"Additional model-specific or workflow-specific metadata."},"formattedOutput":{"oneOf":[{"type":"string"},{"type":"null"}],"description":"Richly formatted version of the finding when available."}}},"FindingLocation":{"description":"Location metadata for a finding within a document.","type":"object","required":["pageNumber"],"properties":{"pageNumber":{"type":"integer"}}},"PolicyRef":{"description":"Lightweight policy reference attached to a finding.","type":"object","required":["id","name"],"properties":{"id":{"type":"string","format":"uuid"},"name":{"type":"string"}}},"TrademarkRef":{"description":"Lightweight trademark reference attached to a finding.","type":"object","required":["id","name","proprietary"],"properties":{"id":{"type":"string","format":"uuid"},"name":{"type":"string"},"proprietary":{"type":"boolean"},"approval":{"oneOf":[{"type":"string"},{"type":"null"}]},"markType":{"oneOf":[{"type":"string"},{"type":"null"}]}}},"ClaimFinding":{"description":"A finding representing an extracted claim, such as a marketing guarantee or warranty statement.","allOf":[{"$ref":"#/components/schemas/FindingBase"},{"type":"object","required":["details"],"properties":{"policy":{"oneOf":[{"$ref":"#/components/schemas/PolicyRef"},{"type":"null"}]},"trademark":{"oneOf":[{"$ref":"#/components/schemas/TrademarkRef"},{"type":"null"}]},"details":{"type":"object","description":"Claim-specific detail payload.","properties":{"claim":{"oneOf":[{"type":"string"},{"type":"null"}],"description":"Canonical claim text extracted from the document."},"disclosureText":{"oneOf":[{"type":"string"},{"type":"null"}],"description":"Recommended disclosure or qualifying text for a claim finding."},"userFixedText":{"oneOf":[{"type":"string"},{"type":"null"}],"description":"User-provided replacement text for a claim finding."},"approvalLimitations":{"oneOf":[{"type":"string"},{"type":"null"}],"description":"Scope or limitations tied to an approved claim finding."},"approvalExpireAt":{"oneOf":[{"type":"string","format":"date-time"},{"type":"null"}],"description":"Expiration timestamp for an approved claim finding."},"suggestions":{"type":"array","items":{"type":"string"},"description":"Suggested alternative text or actions for the finding."}}}}}]},"TrademarkInstanceFinding":{"description":"A finding representing a potential trademark usage issue detected in the document.","allOf":[{"$ref":"#/components/schemas/FindingBase"},{"type":"object","required":["trademark","details"],"properties":{"policy":{"oneOf":[{"$ref":"#/components/schemas/PolicyRef"},{"type":"null"}]},"trademark":{"$ref":"#/components/schemas/TrademarkRef"},"details":{"type":"object","description":"Trademark-specific detail payload.","properties":{"suggestedFixCasing":{"type":"boolean","description":"Whether the trademark instance suggests a casing fix."},"recommendedMarkType":{"type":"string","description":"Recommended mark type for a trademark instance (e.g. 'trademark', 'registered')."},"suggestedMarkExplanation":{"type":"string","description":"Explanation for the recommended mark type."},"suggestedMarkRecord":{"oneOf":[{"type":"object"},{"type":"null"}],"description":"USPTO record details when a trademark match is found.","properties":{"keyword":{"type":"string"},"registrationNumber":{"type":"string"},"registrationDate":{"type":"string"},"statusLabel":{"type":"string"},"ownerName":{"type":"string"},"logo":{"type":"string","format":"uri"}}}}}}}]}}}}
```

## The FindingBase object

```json
{"openapi":"3.1.0","info":{"title":"Protege External Review API","version":"1.0.1"},"components":{"schemas":{"FindingBase":{"description":"Fields shared across every finding kind.","type":"object","required":["kind","text","comment","feedbackLocation","status","details"],"properties":{"kind":{"type":"string","enum":["policy_feedback","claim","trademark_instance"],"description":"Category of finding returned by Protege."},"text":{"oneOf":[{"type":"string"},{"type":"null"}],"description":"Text snippet or extracted value associated with the finding, when available."},"comment":{"oneOf":[{"type":"string"},{"type":"null"}],"description":"Reviewer-facing explanation of the issue or recommendation."},"riskLevel":{"oneOf":[{"type":"string"},{"type":"null"}],"description":"Severity or risk classification assigned by the review."},"feedbackLocation":{"type":"string","description":"Machine-readable indicator of the content medium where the finding was detected (e.g. 'text', 'image_ocr_text')."},"location":{"$ref":"#/components/schemas/FindingLocation"},"status":{"type":"string","description":"Resolution or approval status associated with the finding."},"approval":{"oneOf":[{"type":"string"},{"type":"null"}],"description":"Approval guidance for trademark-related findings, when applicable."},"metadata":{"oneOf":[{"type":"object"},{"type":"null"}],"description":"Additional model-specific or workflow-specific metadata."},"formattedOutput":{"oneOf":[{"type":"string"},{"type":"null"}],"description":"Richly formatted version of the finding when available."}}},"FindingLocation":{"description":"Location metadata for a finding within a document.","type":"object","required":["pageNumber"],"properties":{"pageNumber":{"type":"integer"}}}}}}
```

## The FindingLocation object

```json
{"openapi":"3.1.0","info":{"title":"Protege External Review API","version":"1.0.1"},"components":{"schemas":{"FindingLocation":{"description":"Location metadata for a finding within a document.","type":"object","required":["pageNumber"],"properties":{"pageNumber":{"type":"integer"}}}}}}
```

## The PolicyFeedbackFinding object

```json
{"openapi":"3.1.0","info":{"title":"Protege External Review API","version":"1.0.1"},"components":{"schemas":{"PolicyFeedbackFinding":{"description":"A finding produced by a policy evaluation, such as a brand compliance violation.","allOf":[{"$ref":"#/components/schemas/FindingBase"},{"type":"object","required":["policy","details"],"properties":{"policy":{"$ref":"#/components/schemas/PolicyRef"},"trademark":{"oneOf":[{"$ref":"#/components/schemas/TrademarkRef"},{"type":"null"}]},"details":{"type":"object","description":"Policy-specific detail payload.","properties":{"policyOutputId":{"oneOf":[{"type":"string"},{"type":"null"}],"description":"Identifier of the policy output that produced this finding."},"recommendation":{"oneOf":[{"type":"string"},{"type":"null"}],"description":"Actionable recommendation for resolving the finding."},"suggestions":{"type":"array","items":{"type":"string"},"description":"Suggested alternative text or actions for the finding."}}}}}]},"FindingBase":{"description":"Fields shared across every finding kind.","type":"object","required":["kind","text","comment","feedbackLocation","status","details"],"properties":{"kind":{"type":"string","enum":["policy_feedback","claim","trademark_instance"],"description":"Category of finding returned by Protege."},"text":{"oneOf":[{"type":"string"},{"type":"null"}],"description":"Text snippet or extracted value associated with the finding, when available."},"comment":{"oneOf":[{"type":"string"},{"type":"null"}],"description":"Reviewer-facing explanation of the issue or recommendation."},"riskLevel":{"oneOf":[{"type":"string"},{"type":"null"}],"description":"Severity or risk classification assigned by the review."},"feedbackLocation":{"type":"string","description":"Machine-readable indicator of the content medium where the finding was detected (e.g. 'text', 'image_ocr_text')."},"location":{"$ref":"#/components/schemas/FindingLocation"},"status":{"type":"string","description":"Resolution or approval status associated with the finding."},"approval":{"oneOf":[{"type":"string"},{"type":"null"}],"description":"Approval guidance for trademark-related findings, when applicable."},"metadata":{"oneOf":[{"type":"object"},{"type":"null"}],"description":"Additional model-specific or workflow-specific metadata."},"formattedOutput":{"oneOf":[{"type":"string"},{"type":"null"}],"description":"Richly formatted version of the finding when available."}}},"FindingLocation":{"description":"Location metadata for a finding within a document.","type":"object","required":["pageNumber"],"properties":{"pageNumber":{"type":"integer"}}},"PolicyRef":{"description":"Lightweight policy reference attached to a finding.","type":"object","required":["id","name"],"properties":{"id":{"type":"string","format":"uuid"},"name":{"type":"string"}}},"TrademarkRef":{"description":"Lightweight trademark reference attached to a finding.","type":"object","required":["id","name","proprietary"],"properties":{"id":{"type":"string","format":"uuid"},"name":{"type":"string"},"proprietary":{"type":"boolean"},"approval":{"oneOf":[{"type":"string"},{"type":"null"}]},"markType":{"oneOf":[{"type":"string"},{"type":"null"}]}}}}}}
```

## The ClaimFinding object

```json
{"openapi":"3.1.0","info":{"title":"Protege External Review API","version":"1.0.1"},"components":{"schemas":{"ClaimFinding":{"description":"A finding representing an extracted claim, such as a marketing guarantee or warranty statement.","allOf":[{"$ref":"#/components/schemas/FindingBase"},{"type":"object","required":["details"],"properties":{"policy":{"oneOf":[{"$ref":"#/components/schemas/PolicyRef"},{"type":"null"}]},"trademark":{"oneOf":[{"$ref":"#/components/schemas/TrademarkRef"},{"type":"null"}]},"details":{"type":"object","description":"Claim-specific detail payload.","properties":{"claim":{"oneOf":[{"type":"string"},{"type":"null"}],"description":"Canonical claim text extracted from the document."},"disclosureText":{"oneOf":[{"type":"string"},{"type":"null"}],"description":"Recommended disclosure or qualifying text for a claim finding."},"userFixedText":{"oneOf":[{"type":"string"},{"type":"null"}],"description":"User-provided replacement text for a claim finding."},"approvalLimitations":{"oneOf":[{"type":"string"},{"type":"null"}],"description":"Scope or limitations tied to an approved claim finding."},"approvalExpireAt":{"oneOf":[{"type":"string","format":"date-time"},{"type":"null"}],"description":"Expiration timestamp for an approved claim finding."},"suggestions":{"type":"array","items":{"type":"string"},"description":"Suggested alternative text or actions for the finding."}}}}}]},"FindingBase":{"description":"Fields shared across every finding kind.","type":"object","required":["kind","text","comment","feedbackLocation","status","details"],"properties":{"kind":{"type":"string","enum":["policy_feedback","claim","trademark_instance"],"description":"Category of finding returned by Protege."},"text":{"oneOf":[{"type":"string"},{"type":"null"}],"description":"Text snippet or extracted value associated with the finding, when available."},"comment":{"oneOf":[{"type":"string"},{"type":"null"}],"description":"Reviewer-facing explanation of the issue or recommendation."},"riskLevel":{"oneOf":[{"type":"string"},{"type":"null"}],"description":"Severity or risk classification assigned by the review."},"feedbackLocation":{"type":"string","description":"Machine-readable indicator of the content medium where the finding was detected (e.g. 'text', 'image_ocr_text')."},"location":{"$ref":"#/components/schemas/FindingLocation"},"status":{"type":"string","description":"Resolution or approval status associated with the finding."},"approval":{"oneOf":[{"type":"string"},{"type":"null"}],"description":"Approval guidance for trademark-related findings, when applicable."},"metadata":{"oneOf":[{"type":"object"},{"type":"null"}],"description":"Additional model-specific or workflow-specific metadata."},"formattedOutput":{"oneOf":[{"type":"string"},{"type":"null"}],"description":"Richly formatted version of the finding when available."}}},"FindingLocation":{"description":"Location metadata for a finding within a document.","type":"object","required":["pageNumber"],"properties":{"pageNumber":{"type":"integer"}}},"PolicyRef":{"description":"Lightweight policy reference attached to a finding.","type":"object","required":["id","name"],"properties":{"id":{"type":"string","format":"uuid"},"name":{"type":"string"}}},"TrademarkRef":{"description":"Lightweight trademark reference attached to a finding.","type":"object","required":["id","name","proprietary"],"properties":{"id":{"type":"string","format":"uuid"},"name":{"type":"string"},"proprietary":{"type":"boolean"},"approval":{"oneOf":[{"type":"string"},{"type":"null"}]},"markType":{"oneOf":[{"type":"string"},{"type":"null"}]}}}}}}
```

## The TrademarkInstanceFinding object

```json
{"openapi":"3.1.0","info":{"title":"Protege External Review API","version":"1.0.1"},"components":{"schemas":{"TrademarkInstanceFinding":{"description":"A finding representing a potential trademark usage issue detected in the document.","allOf":[{"$ref":"#/components/schemas/FindingBase"},{"type":"object","required":["trademark","details"],"properties":{"policy":{"oneOf":[{"$ref":"#/components/schemas/PolicyRef"},{"type":"null"}]},"trademark":{"$ref":"#/components/schemas/TrademarkRef"},"details":{"type":"object","description":"Trademark-specific detail payload.","properties":{"suggestedFixCasing":{"type":"boolean","description":"Whether the trademark instance suggests a casing fix."},"recommendedMarkType":{"type":"string","description":"Recommended mark type for a trademark instance (e.g. 'trademark', 'registered')."},"suggestedMarkExplanation":{"type":"string","description":"Explanation for the recommended mark type."},"suggestedMarkRecord":{"oneOf":[{"type":"object"},{"type":"null"}],"description":"USPTO record details when a trademark match is found.","properties":{"keyword":{"type":"string"},"registrationNumber":{"type":"string"},"registrationDate":{"type":"string"},"statusLabel":{"type":"string"},"ownerName":{"type":"string"},"logo":{"type":"string","format":"uri"}}}}}}}]},"FindingBase":{"description":"Fields shared across every finding kind.","type":"object","required":["kind","text","comment","feedbackLocation","status","details"],"properties":{"kind":{"type":"string","enum":["policy_feedback","claim","trademark_instance"],"description":"Category of finding returned by Protege."},"text":{"oneOf":[{"type":"string"},{"type":"null"}],"description":"Text snippet or extracted value associated with the finding, when available."},"comment":{"oneOf":[{"type":"string"},{"type":"null"}],"description":"Reviewer-facing explanation of the issue or recommendation."},"riskLevel":{"oneOf":[{"type":"string"},{"type":"null"}],"description":"Severity or risk classification assigned by the review."},"feedbackLocation":{"type":"string","description":"Machine-readable indicator of the content medium where the finding was detected (e.g. 'text', 'image_ocr_text')."},"location":{"$ref":"#/components/schemas/FindingLocation"},"status":{"type":"string","description":"Resolution or approval status associated with the finding."},"approval":{"oneOf":[{"type":"string"},{"type":"null"}],"description":"Approval guidance for trademark-related findings, when applicable."},"metadata":{"oneOf":[{"type":"object"},{"type":"null"}],"description":"Additional model-specific or workflow-specific metadata."},"formattedOutput":{"oneOf":[{"type":"string"},{"type":"null"}],"description":"Richly formatted version of the finding when available."}}},"FindingLocation":{"description":"Location metadata for a finding within a document.","type":"object","required":["pageNumber"],"properties":{"pageNumber":{"type":"integer"}}},"PolicyRef":{"description":"Lightweight policy reference attached to a finding.","type":"object","required":["id","name"],"properties":{"id":{"type":"string","format":"uuid"},"name":{"type":"string"}}},"TrademarkRef":{"description":"Lightweight trademark reference attached to a finding.","type":"object","required":["id","name","proprietary"],"properties":{"id":{"type":"string","format":"uuid"},"name":{"type":"string"},"proprietary":{"type":"boolean"},"approval":{"oneOf":[{"type":"string"},{"type":"null"}]},"markType":{"oneOf":[{"type":"string"},{"type":"null"}]}}}}}}
```

## The RateLimitError object

```json
{"openapi":"3.1.0","info":{"title":"Protege External Review API","version":"1.0.1"},"components":{"schemas":{"RateLimitError":{"description":"Returned when the client has exceeded the allowed request rate.","type":"object","required":["error","retryAfter"],"properties":{"error":{"type":"string","description":"Human-readable description of the rate-limit violation."},"retryAfter":{"type":"integer","description":"Number of seconds the client should wait before retrying."}}}}}}
```

## The ReviewDocumentSummary object

```json
{"openapi":"3.1.0","info":{"title":"Protege External Review API","version":"1.0.1"},"components":{"schemas":{"ReviewDocumentSummary":{"description":"Summary metadata about the reviewed source document.","type":"object","required":["title","fileType"],"properties":{"title":{"type":"string","description":"Title associated with the reviewed document."},"fileType":{"type":"string","enum":["TEXT","PDF","WEBPAGE","IMAGE","WEBSITE"],"description":"Protege document type classification for the reviewed content."},"externalId":{"oneOf":[{"type":"string"},{"type":"null"}],"description":"Client-provided identifier echoed back in review responses."}}}}}}
```

## The CompletedReviewResponse object

```json
{"openapi":"3.1.0","info":{"title":"Protege External Review API","version":"1.0.1"},"components":{"schemas":{"CompletedReviewResponse":{"description":"Final response returned when a document review has completed successfully.","type":"object","required":["id","status","mode","documentId","documentEvaluationTypeId","document","findings"],"properties":{"id":{"type":"string","format":"uuid"},"status":{"type":"string","enum":["completed"]},"mode":{"$ref":"#/components/schemas/ReviewMode"},"documentId":{"type":"string","format":"uuid"},"documentEvaluationTypeId":{"type":"string","format":"uuid"},"document":{"$ref":"#/components/schemas/ReviewDocumentSummary"},"findings":{"type":"array","description":"Structured findings produced by the completed review.","items":{"$ref":"#/components/schemas/Finding"}}}},"ReviewMode":{"description":"Controls whether the review should complete inline or be queued for background processing.","type":"string","enum":["sync","async"],"default":"sync"},"ReviewDocumentSummary":{"description":"Summary metadata about the reviewed source document.","type":"object","required":["title","fileType"],"properties":{"title":{"type":"string","description":"Title associated with the reviewed document."},"fileType":{"type":"string","enum":["TEXT","PDF","WEBPAGE","IMAGE","WEBSITE"],"description":"Protege document type classification for the reviewed content."},"externalId":{"oneOf":[{"type":"string"},{"type":"null"}],"description":"Client-provided identifier echoed back in review responses."}}},"Finding":{"description":"Structured review output describing a policy, trademark, or claim-related issue found in the document. The populated fields depend on the `kind` value.\n","oneOf":[{"$ref":"#/components/schemas/PolicyFeedbackFinding"},{"$ref":"#/components/schemas/ClaimFinding"},{"$ref":"#/components/schemas/TrademarkInstanceFinding"}],"discriminator":{"propertyName":"kind","mapping":{"policy_feedback":"#/components/schemas/PolicyFeedbackFinding","claim":"#/components/schemas/ClaimFinding","trademark_instance":"#/components/schemas/TrademarkInstanceFinding"}}},"PolicyFeedbackFinding":{"description":"A finding produced by a policy evaluation, such as a brand compliance violation.","allOf":[{"$ref":"#/components/schemas/FindingBase"},{"type":"object","required":["policy","details"],"properties":{"policy":{"$ref":"#/components/schemas/PolicyRef"},"trademark":{"oneOf":[{"$ref":"#/components/schemas/TrademarkRef"},{"type":"null"}]},"details":{"type":"object","description":"Policy-specific detail payload.","properties":{"policyOutputId":{"oneOf":[{"type":"string"},{"type":"null"}],"description":"Identifier of the policy output that produced this finding."},"recommendation":{"oneOf":[{"type":"string"},{"type":"null"}],"description":"Actionable recommendation for resolving the finding."},"suggestions":{"type":"array","items":{"type":"string"},"description":"Suggested alternative text or actions for the finding."}}}}}]},"FindingBase":{"description":"Fields shared across every finding kind.","type":"object","required":["kind","text","comment","feedbackLocation","status","details"],"properties":{"kind":{"type":"string","enum":["policy_feedback","claim","trademark_instance"],"description":"Category of finding returned by Protege."},"text":{"oneOf":[{"type":"string"},{"type":"null"}],"description":"Text snippet or extracted value associated with the finding, when available."},"comment":{"oneOf":[{"type":"string"},{"type":"null"}],"description":"Reviewer-facing explanation of the issue or recommendation."},"riskLevel":{"oneOf":[{"type":"string"},{"type":"null"}],"description":"Severity or risk classification assigned by the review."},"feedbackLocation":{"type":"string","description":"Machine-readable indicator of the content medium where the finding was detected (e.g. 'text', 'image_ocr_text')."},"location":{"$ref":"#/components/schemas/FindingLocation"},"status":{"type":"string","description":"Resolution or approval status associated with the finding."},"approval":{"oneOf":[{"type":"string"},{"type":"null"}],"description":"Approval guidance for trademark-related findings, when applicable."},"metadata":{"oneOf":[{"type":"object"},{"type":"null"}],"description":"Additional model-specific or workflow-specific metadata."},"formattedOutput":{"oneOf":[{"type":"string"},{"type":"null"}],"description":"Richly formatted version of the finding when available."}}},"FindingLocation":{"description":"Location metadata for a finding within a document.","type":"object","required":["pageNumber"],"properties":{"pageNumber":{"type":"integer"}}},"PolicyRef":{"description":"Lightweight policy reference attached to a finding.","type":"object","required":["id","name"],"properties":{"id":{"type":"string","format":"uuid"},"name":{"type":"string"}}},"TrademarkRef":{"description":"Lightweight trademark reference attached to a finding.","type":"object","required":["id","name","proprietary"],"properties":{"id":{"type":"string","format":"uuid"},"name":{"type":"string"},"proprietary":{"type":"boolean"},"approval":{"oneOf":[{"type":"string"},{"type":"null"}]},"markType":{"oneOf":[{"type":"string"},{"type":"null"}]}}},"ClaimFinding":{"description":"A finding representing an extracted claim, such as a marketing guarantee or warranty statement.","allOf":[{"$ref":"#/components/schemas/FindingBase"},{"type":"object","required":["details"],"properties":{"policy":{"oneOf":[{"$ref":"#/components/schemas/PolicyRef"},{"type":"null"}]},"trademark":{"oneOf":[{"$ref":"#/components/schemas/TrademarkRef"},{"type":"null"}]},"details":{"type":"object","description":"Claim-specific detail payload.","properties":{"claim":{"oneOf":[{"type":"string"},{"type":"null"}],"description":"Canonical claim text extracted from the document."},"disclosureText":{"oneOf":[{"type":"string"},{"type":"null"}],"description":"Recommended disclosure or qualifying text for a claim finding."},"userFixedText":{"oneOf":[{"type":"string"},{"type":"null"}],"description":"User-provided replacement text for a claim finding."},"approvalLimitations":{"oneOf":[{"type":"string"},{"type":"null"}],"description":"Scope or limitations tied to an approved claim finding."},"approvalExpireAt":{"oneOf":[{"type":"string","format":"date-time"},{"type":"null"}],"description":"Expiration timestamp for an approved claim finding."},"suggestions":{"type":"array","items":{"type":"string"},"description":"Suggested alternative text or actions for the finding."}}}}}]},"TrademarkInstanceFinding":{"description":"A finding representing a potential trademark usage issue detected in the document.","allOf":[{"$ref":"#/components/schemas/FindingBase"},{"type":"object","required":["trademark","details"],"properties":{"policy":{"oneOf":[{"$ref":"#/components/schemas/PolicyRef"},{"type":"null"}]},"trademark":{"$ref":"#/components/schemas/TrademarkRef"},"details":{"type":"object","description":"Trademark-specific detail payload.","properties":{"suggestedFixCasing":{"type":"boolean","description":"Whether the trademark instance suggests a casing fix."},"recommendedMarkType":{"type":"string","description":"Recommended mark type for a trademark instance (e.g. 'trademark', 'registered')."},"suggestedMarkExplanation":{"type":"string","description":"Explanation for the recommended mark type."},"suggestedMarkRecord":{"oneOf":[{"type":"object"},{"type":"null"}],"description":"USPTO record details when a trademark match is found.","properties":{"keyword":{"type":"string"},"registrationNumber":{"type":"string"},"registrationDate":{"type":"string"},"statusLabel":{"type":"string"},"ownerName":{"type":"string"},"logo":{"type":"string","format":"uri"}}}}}}}]}}}}
```

## The PendingReviewResponse object

```json
{"openapi":"3.1.0","info":{"title":"Protege External Review API","version":"1.0.1"},"components":{"schemas":{"PendingReviewResponse":{"description":"Review response returned while an asynchronous review is still queued, processing, or has failed.","type":"object","required":["id","status","mode","documentId","documentEvaluationTypeId","document","findings"],"properties":{"id":{"type":"string","format":"uuid"},"status":{"type":"string","enum":["queued","processing","failed"]},"mode":{"type":"string","enum":["async"]},"documentId":{"type":"string","format":"uuid"},"documentEvaluationTypeId":{"type":"string","format":"uuid"},"document":{"$ref":"#/components/schemas/ReviewDocumentSummary"},"findings":{"type":"array","description":"Findings accumulated so far. This is typically empty until processing finishes.","items":{"$ref":"#/components/schemas/Finding"}},"error":{"type":"string","description":"Failure message when the asynchronous review ends in a `failed` state."}}},"ReviewDocumentSummary":{"description":"Summary metadata about the reviewed source document.","type":"object","required":["title","fileType"],"properties":{"title":{"type":"string","description":"Title associated with the reviewed document."},"fileType":{"type":"string","enum":["TEXT","PDF","WEBPAGE","IMAGE","WEBSITE"],"description":"Protege document type classification for the reviewed content."},"externalId":{"oneOf":[{"type":"string"},{"type":"null"}],"description":"Client-provided identifier echoed back in review responses."}}},"Finding":{"description":"Structured review output describing a policy, trademark, or claim-related issue found in the document. The populated fields depend on the `kind` value.\n","oneOf":[{"$ref":"#/components/schemas/PolicyFeedbackFinding"},{"$ref":"#/components/schemas/ClaimFinding"},{"$ref":"#/components/schemas/TrademarkInstanceFinding"}],"discriminator":{"propertyName":"kind","mapping":{"policy_feedback":"#/components/schemas/PolicyFeedbackFinding","claim":"#/components/schemas/ClaimFinding","trademark_instance":"#/components/schemas/TrademarkInstanceFinding"}}},"PolicyFeedbackFinding":{"description":"A finding produced by a policy evaluation, such as a brand compliance violation.","allOf":[{"$ref":"#/components/schemas/FindingBase"},{"type":"object","required":["policy","details"],"properties":{"policy":{"$ref":"#/components/schemas/PolicyRef"},"trademark":{"oneOf":[{"$ref":"#/components/schemas/TrademarkRef"},{"type":"null"}]},"details":{"type":"object","description":"Policy-specific detail payload.","properties":{"policyOutputId":{"oneOf":[{"type":"string"},{"type":"null"}],"description":"Identifier of the policy output that produced this finding."},"recommendation":{"oneOf":[{"type":"string"},{"type":"null"}],"description":"Actionable recommendation for resolving the finding."},"suggestions":{"type":"array","items":{"type":"string"},"description":"Suggested alternative text or actions for the finding."}}}}}]},"FindingBase":{"description":"Fields shared across every finding kind.","type":"object","required":["kind","text","comment","feedbackLocation","status","details"],"properties":{"kind":{"type":"string","enum":["policy_feedback","claim","trademark_instance"],"description":"Category of finding returned by Protege."},"text":{"oneOf":[{"type":"string"},{"type":"null"}],"description":"Text snippet or extracted value associated with the finding, when available."},"comment":{"oneOf":[{"type":"string"},{"type":"null"}],"description":"Reviewer-facing explanation of the issue or recommendation."},"riskLevel":{"oneOf":[{"type":"string"},{"type":"null"}],"description":"Severity or risk classification assigned by the review."},"feedbackLocation":{"type":"string","description":"Machine-readable indicator of the content medium where the finding was detected (e.g. 'text', 'image_ocr_text')."},"location":{"$ref":"#/components/schemas/FindingLocation"},"status":{"type":"string","description":"Resolution or approval status associated with the finding."},"approval":{"oneOf":[{"type":"string"},{"type":"null"}],"description":"Approval guidance for trademark-related findings, when applicable."},"metadata":{"oneOf":[{"type":"object"},{"type":"null"}],"description":"Additional model-specific or workflow-specific metadata."},"formattedOutput":{"oneOf":[{"type":"string"},{"type":"null"}],"description":"Richly formatted version of the finding when available."}}},"FindingLocation":{"description":"Location metadata for a finding within a document.","type":"object","required":["pageNumber"],"properties":{"pageNumber":{"type":"integer"}}},"PolicyRef":{"description":"Lightweight policy reference attached to a finding.","type":"object","required":["id","name"],"properties":{"id":{"type":"string","format":"uuid"},"name":{"type":"string"}}},"TrademarkRef":{"description":"Lightweight trademark reference attached to a finding.","type":"object","required":["id","name","proprietary"],"properties":{"id":{"type":"string","format":"uuid"},"name":{"type":"string"},"proprietary":{"type":"boolean"},"approval":{"oneOf":[{"type":"string"},{"type":"null"}]},"markType":{"oneOf":[{"type":"string"},{"type":"null"}]}}},"ClaimFinding":{"description":"A finding representing an extracted claim, such as a marketing guarantee or warranty statement.","allOf":[{"$ref":"#/components/schemas/FindingBase"},{"type":"object","required":["details"],"properties":{"policy":{"oneOf":[{"$ref":"#/components/schemas/PolicyRef"},{"type":"null"}]},"trademark":{"oneOf":[{"$ref":"#/components/schemas/TrademarkRef"},{"type":"null"}]},"details":{"type":"object","description":"Claim-specific detail payload.","properties":{"claim":{"oneOf":[{"type":"string"},{"type":"null"}],"description":"Canonical claim text extracted from the document."},"disclosureText":{"oneOf":[{"type":"string"},{"type":"null"}],"description":"Recommended disclosure or qualifying text for a claim finding."},"userFixedText":{"oneOf":[{"type":"string"},{"type":"null"}],"description":"User-provided replacement text for a claim finding."},"approvalLimitations":{"oneOf":[{"type":"string"},{"type":"null"}],"description":"Scope or limitations tied to an approved claim finding."},"approvalExpireAt":{"oneOf":[{"type":"string","format":"date-time"},{"type":"null"}],"description":"Expiration timestamp for an approved claim finding."},"suggestions":{"type":"array","items":{"type":"string"},"description":"Suggested alternative text or actions for the finding."}}}}}]},"TrademarkInstanceFinding":{"description":"A finding representing a potential trademark usage issue detected in the document.","allOf":[{"$ref":"#/components/schemas/FindingBase"},{"type":"object","required":["trademark","details"],"properties":{"policy":{"oneOf":[{"$ref":"#/components/schemas/PolicyRef"},{"type":"null"}]},"trademark":{"$ref":"#/components/schemas/TrademarkRef"},"details":{"type":"object","description":"Trademark-specific detail payload.","properties":{"suggestedFixCasing":{"type":"boolean","description":"Whether the trademark instance suggests a casing fix."},"recommendedMarkType":{"type":"string","description":"Recommended mark type for a trademark instance (e.g. 'trademark', 'registered')."},"suggestedMarkExplanation":{"type":"string","description":"Explanation for the recommended mark type."},"suggestedMarkRecord":{"oneOf":[{"type":"object"},{"type":"null"}],"description":"USPTO record details when a trademark match is found.","properties":{"keyword":{"type":"string"},"registrationNumber":{"type":"string"},"registrationDate":{"type":"string"},"statusLabel":{"type":"string"},"ownerName":{"type":"string"},"logo":{"type":"string","format":"uri"}}}}}}}]}}}}
```

## The DocumentReviewSummary object

```json
{"openapi":"3.1.0","info":{"title":"Protege External Review API","version":"1.0.1"},"components":{"schemas":{"DocumentReviewSummary":{"description":"Summary representation of a review returned by the list endpoint.","type":"object","required":["id","status","documentId","documentEvaluationTypeId","document","createdAt","updatedAt"],"properties":{"id":{"type":"string","format":"uuid"},"status":{"$ref":"#/components/schemas/ReviewStatus"},"documentId":{"type":"string","format":"uuid"},"documentEvaluationTypeId":{"type":"string","format":"uuid"},"document":{"$ref":"#/components/schemas/ReviewDocumentSummary"},"createdAt":{"type":"string","format":"date-time"},"updatedAt":{"type":"string","format":"date-time"},"error":{"type":"string","description":"Failure message for reviews that completed with an error."}}},"ReviewStatus":{"description":"Current processing state of a submitted document review.","type":"string","enum":["queued","processing","completed","failed"]},"ReviewDocumentSummary":{"description":"Summary metadata about the reviewed source document.","type":"object","required":["title","fileType"],"properties":{"title":{"type":"string","description":"Title associated with the reviewed document."},"fileType":{"type":"string","enum":["TEXT","PDF","WEBPAGE","IMAGE","WEBSITE"],"description":"Protege document type classification for the reviewed content."},"externalId":{"oneOf":[{"type":"string"},{"type":"null"}],"description":"Client-provided identifier echoed back in review responses."}}}}}}
```

## The DocumentReviewListResponse object

```json
{"openapi":"3.1.0","info":{"title":"Protege External Review API","version":"1.0.1"},"components":{"schemas":{"DocumentReviewListResponse":{"description":"Paginated collection of reviews visible to the calling API key.","type":"object","required":["documentReviews","page"],"properties":{"documentReviews":{"type":"array","items":{"$ref":"#/components/schemas/DocumentReviewSummary"}},"page":{"$ref":"#/components/schemas/PageMetadata"}}},"DocumentReviewSummary":{"description":"Summary representation of a review returned by the list endpoint.","type":"object","required":["id","status","documentId","documentEvaluationTypeId","document","createdAt","updatedAt"],"properties":{"id":{"type":"string","format":"uuid"},"status":{"$ref":"#/components/schemas/ReviewStatus"},"documentId":{"type":"string","format":"uuid"},"documentEvaluationTypeId":{"type":"string","format":"uuid"},"document":{"$ref":"#/components/schemas/ReviewDocumentSummary"},"createdAt":{"type":"string","format":"date-time"},"updatedAt":{"type":"string","format":"date-time"},"error":{"type":"string","description":"Failure message for reviews that completed with an error."}}},"ReviewStatus":{"description":"Current processing state of a submitted document review.","type":"string","enum":["queued","processing","completed","failed"]},"ReviewDocumentSummary":{"description":"Summary metadata about the reviewed source document.","type":"object","required":["title","fileType"],"properties":{"title":{"type":"string","description":"Title associated with the reviewed document."},"fileType":{"type":"string","enum":["TEXT","PDF","WEBPAGE","IMAGE","WEBSITE"],"description":"Protege document type classification for the reviewed content."},"externalId":{"oneOf":[{"type":"string"},{"type":"null"}],"description":"Client-provided identifier echoed back in review responses."}}},"PageMetadata":{"description":"Standard offset-based pagination metadata.","type":"object","required":["limit","offset","count","total"],"properties":{"limit":{"type":"integer","default":25},"offset":{"type":"integer","default":0},"count":{"type":"integer"},"total":{"type":"integer"}}}}}}
```

## The DocumentEvaluationType object

```json
{"openapi":"3.1.0","info":{"title":"Protege External Review API","version":"1.0.1"},"components":{"schemas":{"DocumentEvaluationType":{"description":"Review configuration that determines which checks, policies, and workflows are applied to a document.","type":"object","required":["id","name","description","useCase"],"properties":{"id":{"type":"string","format":"uuid"},"name":{"type":"string"},"description":{"type":"string"},"useCase":{"type":"string","enum":["marketing_review","document_qa"],"description":"Determines what the evaluation type is optimized for. `marketing_review` analyzes documents and web content for compliance against brand policies. `document_qa` extracts structured content from documents and websites for specific queries and document-level grouping.\n"}}}}}}
```

## The DocumentEvaluationTypeListResponse object

```json
{"openapi":"3.1.0","info":{"title":"Protege External Review API","version":"1.0.1"},"components":{"schemas":{"DocumentEvaluationTypeListResponse":{"description":"Paginated list of document evaluation types available to the API key's tenant.","type":"object","required":["documentEvaluationTypes","page"],"properties":{"documentEvaluationTypes":{"type":"array","items":{"oneOf":[{"$ref":"#/components/schemas/DocumentEvaluationType"},{"$ref":"#/components/schemas/ExpandedDocumentEvaluationType"}]}},"page":{"$ref":"#/components/schemas/PageMetadata"}}},"DocumentEvaluationType":{"description":"Review configuration that determines which checks, policies, and workflows are applied to a document.","type":"object","required":["id","name","description","useCase"],"properties":{"id":{"type":"string","format":"uuid"},"name":{"type":"string"},"description":{"type":"string"},"useCase":{"type":"string","enum":["marketing_review","document_qa"],"description":"Determines what the evaluation type is optimized for. `marketing_review` analyzes documents and web content for compliance against brand policies. `document_qa` extracts structured content from documents and websites for specific queries and document-level grouping.\n"}}},"ExpandedDocumentEvaluationType":{"description":"Expanded document evaluation type including its policy groups and nested policies.","allOf":[{"$ref":"#/components/schemas/DocumentEvaluationType"},{"type":"object","required":["policyGroups"],"properties":{"policyGroups":{"type":"array","items":{"$ref":"#/components/schemas/ExpandedPolicyGroup"}}}}]},"ExpandedPolicyGroup":{"allOf":[{"$ref":"#/components/schemas/PolicyGroup"},{"type":"object","required":["policies"],"properties":{"policies":{"type":"array","items":{"$ref":"#/components/schemas/NestedPolicy"}}}}]},"PolicyGroup":{"description":"Grouping of related review policies used to organize evaluation coverage.","type":"object","required":["id","name","description","useCase"],"properties":{"id":{"type":"string","format":"uuid"},"name":{"type":"string"},"description":{"type":"string"},"useCase":{"type":"string","enum":["marketing_review","document_qa"],"description":"Determines what the evaluation type is optimized for. `marketing_review` analyzes documents and web content for compliance against brand policies. `document_qa` extracts structured content from documents and websites for specific queries and document-level grouping.\n"},"prePolicy":{"oneOf":[{"$ref":"#/components/schemas/PolicyPrePolicyRef"},{"type":"null"}]}}},"PolicyPrePolicyRef":{"description":"Reference to a prerequisite or pre-check policy associated with a policy group.","type":"object","required":["id","name"],"properties":{"id":{"type":"string","format":"uuid"},"name":{"type":"string"}}},"NestedPolicy":{"description":"Policy summary embedded under parent resources such as policy groups.","type":"object","required":["id","name","description","useCase","enabled","riskLevel"],"properties":{"id":{"type":"string","format":"uuid"},"name":{"type":"string"},"description":{"type":"string"},"useCase":{"type":"string","enum":["marketing_review","document_qa"],"description":"Determines what the evaluation type is optimized for. `marketing_review` analyzes documents and web content for compliance against brand policies. `document_qa` extracts structured content from documents and websites for specific queries and document-level grouping.\n"},"enabled":{"type":"boolean","description":"Whether the policy is currently active and evaluated."},"riskLevel":{"type":"string","description":"Severity or risk classification assigned to this policy."}}},"PageMetadata":{"description":"Standard offset-based pagination metadata.","type":"object","required":["limit","offset","count","total"],"properties":{"limit":{"type":"integer","default":25},"offset":{"type":"integer","default":0},"count":{"type":"integer"},"total":{"type":"integer"}}}}}}
```

## The PolicyGroupRef object

```json
{"openapi":"3.1.0","info":{"title":"Protege External Review API","version":"1.0.1"},"components":{"schemas":{"PolicyGroupRef":{"description":"Lightweight reference to a policy group.","type":"object","required":["id","name"],"properties":{"id":{"type":"string","format":"uuid"},"name":{"type":"string"}}}}}}
```

## The PolicyPrePolicyRef object

```json
{"openapi":"3.1.0","info":{"title":"Protege External Review API","version":"1.0.1"},"components":{"schemas":{"PolicyPrePolicyRef":{"description":"Reference to a prerequisite or pre-check policy associated with a policy group.","type":"object","required":["id","name"],"properties":{"id":{"type":"string","format":"uuid"},"name":{"type":"string"}}}}}}
```

## The NestedPolicy object

```json
{"openapi":"3.1.0","info":{"title":"Protege External Review API","version":"1.0.1"},"components":{"schemas":{"NestedPolicy":{"description":"Policy summary embedded under parent resources such as policy groups.","type":"object","required":["id","name","description","useCase","enabled","riskLevel"],"properties":{"id":{"type":"string","format":"uuid"},"name":{"type":"string"},"description":{"type":"string"},"useCase":{"type":"string","enum":["marketing_review","document_qa"],"description":"Determines what the evaluation type is optimized for. `marketing_review` analyzes documents and web content for compliance against brand policies. `document_qa` extracts structured content from documents and websites for specific queries and document-level grouping.\n"},"enabled":{"type":"boolean","description":"Whether the policy is currently active and evaluated."},"riskLevel":{"type":"string","description":"Severity or risk classification assigned to this policy."}}}}}}
```

## The Policy object

```json
{"openapi":"3.1.0","info":{"title":"Protege External Review API","version":"1.0.1"},"components":{"schemas":{"Policy":{"description":"Full policy record returned by the policies endpoint.","allOf":[{"$ref":"#/components/schemas/NestedPolicy"},{"type":"object","properties":{"policyGroup":{"oneOf":[{"$ref":"#/components/schemas/PolicyGroupRef"},{"type":"null"}]}}}]},"NestedPolicy":{"description":"Policy summary embedded under parent resources such as policy groups.","type":"object","required":["id","name","description","useCase","enabled","riskLevel"],"properties":{"id":{"type":"string","format":"uuid"},"name":{"type":"string"},"description":{"type":"string"},"useCase":{"type":"string","enum":["marketing_review","document_qa"],"description":"Determines what the evaluation type is optimized for. `marketing_review` analyzes documents and web content for compliance against brand policies. `document_qa` extracts structured content from documents and websites for specific queries and document-level grouping.\n"},"enabled":{"type":"boolean","description":"Whether the policy is currently active and evaluated."},"riskLevel":{"type":"string","description":"Severity or risk classification assigned to this policy."}}},"PolicyGroupRef":{"description":"Lightweight reference to a policy group.","type":"object","required":["id","name"],"properties":{"id":{"type":"string","format":"uuid"},"name":{"type":"string"}}}}}}
```

## The PolicyListResponse object

```json
{"openapi":"3.1.0","info":{"title":"Protege External Review API","version":"1.0.1"},"components":{"schemas":{"PolicyListResponse":{"description":"Paginated collection of policies.","type":"object","required":["policies","page"],"properties":{"policies":{"type":"array","items":{"$ref":"#/components/schemas/Policy"}},"page":{"$ref":"#/components/schemas/PageMetadata"}}},"Policy":{"description":"Full policy record returned by the policies endpoint.","allOf":[{"$ref":"#/components/schemas/NestedPolicy"},{"type":"object","properties":{"policyGroup":{"oneOf":[{"$ref":"#/components/schemas/PolicyGroupRef"},{"type":"null"}]}}}]},"NestedPolicy":{"description":"Policy summary embedded under parent resources such as policy groups.","type":"object","required":["id","name","description","useCase","enabled","riskLevel"],"properties":{"id":{"type":"string","format":"uuid"},"name":{"type":"string"},"description":{"type":"string"},"useCase":{"type":"string","enum":["marketing_review","document_qa"],"description":"Determines what the evaluation type is optimized for. `marketing_review` analyzes documents and web content for compliance against brand policies. `document_qa` extracts structured content from documents and websites for specific queries and document-level grouping.\n"},"enabled":{"type":"boolean","description":"Whether the policy is currently active and evaluated."},"riskLevel":{"type":"string","description":"Severity or risk classification assigned to this policy."}}},"PolicyGroupRef":{"description":"Lightweight reference to a policy group.","type":"object","required":["id","name"],"properties":{"id":{"type":"string","format":"uuid"},"name":{"type":"string"}}},"PageMetadata":{"description":"Standard offset-based pagination metadata.","type":"object","required":["limit","offset","count","total"],"properties":{"limit":{"type":"integer","default":25},"offset":{"type":"integer","default":0},"count":{"type":"integer"},"total":{"type":"integer"}}}}}}
```

## The PolicyGroup object

```json
{"openapi":"3.1.0","info":{"title":"Protege External Review API","version":"1.0.1"},"components":{"schemas":{"PolicyGroup":{"description":"Grouping of related review policies used to organize evaluation coverage.","type":"object","required":["id","name","description","useCase"],"properties":{"id":{"type":"string","format":"uuid"},"name":{"type":"string"},"description":{"type":"string"},"useCase":{"type":"string","enum":["marketing_review","document_qa"],"description":"Determines what the evaluation type is optimized for. `marketing_review` analyzes documents and web content for compliance against brand policies. `document_qa` extracts structured content from documents and websites for specific queries and document-level grouping.\n"},"prePolicy":{"oneOf":[{"$ref":"#/components/schemas/PolicyPrePolicyRef"},{"type":"null"}]}}},"PolicyPrePolicyRef":{"description":"Reference to a prerequisite or pre-check policy associated with a policy group.","type":"object","required":["id","name"],"properties":{"id":{"type":"string","format":"uuid"},"name":{"type":"string"}}}}}}
```

## The ExpandedPolicyGroup object

```json
{"openapi":"3.1.0","info":{"title":"Protege External Review API","version":"1.0.1"},"components":{"schemas":{"ExpandedPolicyGroup":{"allOf":[{"$ref":"#/components/schemas/PolicyGroup"},{"type":"object","required":["policies"],"properties":{"policies":{"type":"array","items":{"$ref":"#/components/schemas/NestedPolicy"}}}}]},"PolicyGroup":{"description":"Grouping of related review policies used to organize evaluation coverage.","type":"object","required":["id","name","description","useCase"],"properties":{"id":{"type":"string","format":"uuid"},"name":{"type":"string"},"description":{"type":"string"},"useCase":{"type":"string","enum":["marketing_review","document_qa"],"description":"Determines what the evaluation type is optimized for. `marketing_review` analyzes documents and web content for compliance against brand policies. `document_qa` extracts structured content from documents and websites for specific queries and document-level grouping.\n"},"prePolicy":{"oneOf":[{"$ref":"#/components/schemas/PolicyPrePolicyRef"},{"type":"null"}]}}},"PolicyPrePolicyRef":{"description":"Reference to a prerequisite or pre-check policy associated with a policy group.","type":"object","required":["id","name"],"properties":{"id":{"type":"string","format":"uuid"},"name":{"type":"string"}}},"NestedPolicy":{"description":"Policy summary embedded under parent resources such as policy groups.","type":"object","required":["id","name","description","useCase","enabled","riskLevel"],"properties":{"id":{"type":"string","format":"uuid"},"name":{"type":"string"},"description":{"type":"string"},"useCase":{"type":"string","enum":["marketing_review","document_qa"],"description":"Determines what the evaluation type is optimized for. `marketing_review` analyzes documents and web content for compliance against brand policies. `document_qa` extracts structured content from documents and websites for specific queries and document-level grouping.\n"},"enabled":{"type":"boolean","description":"Whether the policy is currently active and evaluated."},"riskLevel":{"type":"string","description":"Severity or risk classification assigned to this policy."}}}}}}
```

## The PolicyGroupListResponse object

```json
{"openapi":"3.1.0","info":{"title":"Protege External Review API","version":"1.0.1"},"components":{"schemas":{"PolicyGroupListResponse":{"description":"Paginated collection of policy groups.","type":"object","required":["policyGroups","page"],"properties":{"policyGroups":{"type":"array","items":{"oneOf":[{"$ref":"#/components/schemas/PolicyGroup"},{"$ref":"#/components/schemas/ExpandedPolicyGroup"}]}},"page":{"$ref":"#/components/schemas/PageMetadata"}}},"PolicyGroup":{"description":"Grouping of related review policies used to organize evaluation coverage.","type":"object","required":["id","name","description","useCase"],"properties":{"id":{"type":"string","format":"uuid"},"name":{"type":"string"},"description":{"type":"string"},"useCase":{"type":"string","enum":["marketing_review","document_qa"],"description":"Determines what the evaluation type is optimized for. `marketing_review` analyzes documents and web content for compliance against brand policies. `document_qa` extracts structured content from documents and websites for specific queries and document-level grouping.\n"},"prePolicy":{"oneOf":[{"$ref":"#/components/schemas/PolicyPrePolicyRef"},{"type":"null"}]}}},"PolicyPrePolicyRef":{"description":"Reference to a prerequisite or pre-check policy associated with a policy group.","type":"object","required":["id","name"],"properties":{"id":{"type":"string","format":"uuid"},"name":{"type":"string"}}},"ExpandedPolicyGroup":{"allOf":[{"$ref":"#/components/schemas/PolicyGroup"},{"type":"object","required":["policies"],"properties":{"policies":{"type":"array","items":{"$ref":"#/components/schemas/NestedPolicy"}}}}]},"NestedPolicy":{"description":"Policy summary embedded under parent resources such as policy groups.","type":"object","required":["id","name","description","useCase","enabled","riskLevel"],"properties":{"id":{"type":"string","format":"uuid"},"name":{"type":"string"},"description":{"type":"string"},"useCase":{"type":"string","enum":["marketing_review","document_qa"],"description":"Determines what the evaluation type is optimized for. `marketing_review` analyzes documents and web content for compliance against brand policies. `document_qa` extracts structured content from documents and websites for specific queries and document-level grouping.\n"},"enabled":{"type":"boolean","description":"Whether the policy is currently active and evaluated."},"riskLevel":{"type":"string","description":"Severity or risk classification assigned to this policy."}}},"PageMetadata":{"description":"Standard offset-based pagination metadata.","type":"object","required":["limit","offset","count","total"],"properties":{"limit":{"type":"integer","default":25},"offset":{"type":"integer","default":0},"count":{"type":"integer"},"total":{"type":"integer"}}}}}}
```

## The ExpandedDocumentEvaluationType object

```json
{"openapi":"3.1.0","info":{"title":"Protege External Review API","version":"1.0.1"},"components":{"schemas":{"ExpandedDocumentEvaluationType":{"description":"Expanded document evaluation type including its policy groups and nested policies.","allOf":[{"$ref":"#/components/schemas/DocumentEvaluationType"},{"type":"object","required":["policyGroups"],"properties":{"policyGroups":{"type":"array","items":{"$ref":"#/components/schemas/ExpandedPolicyGroup"}}}}]},"DocumentEvaluationType":{"description":"Review configuration that determines which checks, policies, and workflows are applied to a document.","type":"object","required":["id","name","description","useCase"],"properties":{"id":{"type":"string","format":"uuid"},"name":{"type":"string"},"description":{"type":"string"},"useCase":{"type":"string","enum":["marketing_review","document_qa"],"description":"Determines what the evaluation type is optimized for. `marketing_review` analyzes documents and web content for compliance against brand policies. `document_qa` extracts structured content from documents and websites for specific queries and document-level grouping.\n"}}},"ExpandedPolicyGroup":{"allOf":[{"$ref":"#/components/schemas/PolicyGroup"},{"type":"object","required":["policies"],"properties":{"policies":{"type":"array","items":{"$ref":"#/components/schemas/NestedPolicy"}}}}]},"PolicyGroup":{"description":"Grouping of related review policies used to organize evaluation coverage.","type":"object","required":["id","name","description","useCase"],"properties":{"id":{"type":"string","format":"uuid"},"name":{"type":"string"},"description":{"type":"string"},"useCase":{"type":"string","enum":["marketing_review","document_qa"],"description":"Determines what the evaluation type is optimized for. `marketing_review` analyzes documents and web content for compliance against brand policies. `document_qa` extracts structured content from documents and websites for specific queries and document-level grouping.\n"},"prePolicy":{"oneOf":[{"$ref":"#/components/schemas/PolicyPrePolicyRef"},{"type":"null"}]}}},"PolicyPrePolicyRef":{"description":"Reference to a prerequisite or pre-check policy associated with a policy group.","type":"object","required":["id","name"],"properties":{"id":{"type":"string","format":"uuid"},"name":{"type":"string"}}},"NestedPolicy":{"description":"Policy summary embedded under parent resources such as policy groups.","type":"object","required":["id","name","description","useCase","enabled","riskLevel"],"properties":{"id":{"type":"string","format":"uuid"},"name":{"type":"string"},"description":{"type":"string"},"useCase":{"type":"string","enum":["marketing_review","document_qa"],"description":"Determines what the evaluation type is optimized for. `marketing_review` analyzes documents and web content for compliance against brand policies. `document_qa` extracts structured content from documents and websites for specific queries and document-level grouping.\n"},"enabled":{"type":"boolean","description":"Whether the policy is currently active and evaluated."},"riskLevel":{"type":"string","description":"Severity or risk classification assigned to this policy."}}}}}}
```

## The Brand object

```json
{"openapi":"3.1.0","info":{"title":"Protege External Review API","version":"1.0.1"},"components":{"schemas":{"Brand":{"description":"Brand available to the authenticated tenant for filtering scanners and reports.","type":"object","required":["id","name"],"properties":{"id":{"type":"string","format":"uuid"},"name":{"type":"string"}}}}}}
```

## The BrandListResponse object

```json
{"openapi":"3.1.0","info":{"title":"Protege External Review API","version":"1.0.1"},"components":{"schemas":{"BrandListResponse":{"description":"Paginated collection of brands.","type":"object","required":["brands","page"],"properties":{"brands":{"type":"array","items":{"$ref":"#/components/schemas/Brand"}},"page":{"$ref":"#/components/schemas/PageMetadata"}}},"Brand":{"description":"Brand available to the authenticated tenant for filtering scanners and reports.","type":"object","required":["id","name"],"properties":{"id":{"type":"string","format":"uuid"},"name":{"type":"string"}}},"PageMetadata":{"description":"Standard offset-based pagination metadata.","type":"object","required":["limit","offset","count","total"],"properties":{"limit":{"type":"integer","default":25},"offset":{"type":"integer","default":0},"count":{"type":"integer"},"total":{"type":"integer"}}}}}}
```

## The PageMetadata object

```json
{"openapi":"3.1.0","info":{"title":"Protege External Review API","version":"1.0.1"},"components":{"schemas":{"PageMetadata":{"description":"Standard offset-based pagination metadata.","type":"object","required":["limit","offset","count","total"],"properties":{"limit":{"type":"integer","default":25},"offset":{"type":"integer","default":0},"count":{"type":"integer"},"total":{"type":"integer"}}}}}}
```

## The ReportBrand object

```json
{"openapi":"3.1.0","info":{"title":"Protege External Review API","version":"1.0.1"},"components":{"schemas":{"ReportBrand":{"description":"Lightweight brand reference attached to a scanner report.","type":"object","required":["id","name"],"properties":{"id":{"type":"string","format":"uuid"},"name":{"type":"string"}}}}}}
```

## The ReportListItem object

```json
{"openapi":"3.1.0","info":{"title":"Protege External Review API","version":"1.0.1"},"components":{"schemas":{"ReportListItem":{"description":"Summary representation of a scanner report.","type":"object","required":["id","name","createdAt","documentCount"],"properties":{"id":{"type":"string","format":"uuid"},"name":{"type":"string"},"createdAt":{"type":"string","format":"date-time"},"brand":{"oneOf":[{"$ref":"#/components/schemas/ReportBrand"},{"type":"null"}]},"documentCount":{"type":"integer"}}},"ReportBrand":{"description":"Lightweight brand reference attached to a scanner report.","type":"object","required":["id","name"],"properties":{"id":{"type":"string","format":"uuid"},"name":{"type":"string"}}}}}}
```

## The ReportDetailSummary object

```json
{"openapi":"3.1.0","info":{"title":"Protege External Review API","version":"1.0.1"},"components":{"schemas":{"ReportDetailSummary":{"description":"Top-level report metadata returned with detailed report responses.","type":"object","required":["id","name","createdAt","documentCount"],"properties":{"id":{"type":"string","format":"uuid"},"name":{"type":"string"},"createdAt":{"type":"string","format":"date-time"},"brand":{"oneOf":[{"$ref":"#/components/schemas/ReportBrand"},{"type":"null"}]},"documentCount":{"type":"integer"}}},"ReportBrand":{"description":"Lightweight brand reference attached to a scanner report.","type":"object","required":["id","name"],"properties":{"id":{"type":"string","format":"uuid"},"name":{"type":"string"}}}}}}
```

## The ReportPage object

```json
{"openapi":"3.1.0","info":{"title":"Protege External Review API","version":"1.0.1"},"components":{"schemas":{"ReportPage":{"description":"Page or document captured within a scanner report.","type":"object","required":["documentId","title","fileType","createdAt"],"properties":{"documentId":{"type":"string","format":"uuid"},"title":{"type":"string"},"link":{"oneOf":[{"type":"string"},{"type":"null"}]},"fileType":{"type":"string"},"createdAt":{"type":"string","format":"date-time"},"lastScannedAt":{"oneOf":[{"type":"string","format":"date-time"},{"type":"null"}]}}}}}}
```

## The ReportListResponse object

```json
{"openapi":"3.1.0","info":{"title":"Protege External Review API","version":"1.0.1"},"components":{"schemas":{"ReportListResponse":{"description":"Paginated collection of scanner reports.","type":"object","required":["reports","page"],"properties":{"reports":{"type":"array","items":{"$ref":"#/components/schemas/ReportListItem"}},"page":{"$ref":"#/components/schemas/PageMetadata"}}},"ReportListItem":{"description":"Summary representation of a scanner report.","type":"object","required":["id","name","createdAt","documentCount"],"properties":{"id":{"type":"string","format":"uuid"},"name":{"type":"string"},"createdAt":{"type":"string","format":"date-time"},"brand":{"oneOf":[{"$ref":"#/components/schemas/ReportBrand"},{"type":"null"}]},"documentCount":{"type":"integer"}}},"ReportBrand":{"description":"Lightweight brand reference attached to a scanner report.","type":"object","required":["id","name"],"properties":{"id":{"type":"string","format":"uuid"},"name":{"type":"string"}}},"PageMetadata":{"description":"Standard offset-based pagination metadata.","type":"object","required":["limit","offset","count","total"],"properties":{"limit":{"type":"integer","default":25},"offset":{"type":"integer","default":0},"count":{"type":"integer"},"total":{"type":"integer"}}}}}}
```

## The ReportDetail object

```json
{"openapi":"3.1.0","info":{"title":"Protege External Review API","version":"1.0.1"},"components":{"schemas":{"ReportDetail":{"description":"Report detail including captured pages and page-level metadata.","allOf":[{"$ref":"#/components/schemas/ReportDetailSummary"},{"type":"object","required":["pages"],"properties":{"pages":{"type":"array","items":{"$ref":"#/components/schemas/ReportPage"}}}}]},"ReportDetailSummary":{"description":"Top-level report metadata returned with detailed report responses.","type":"object","required":["id","name","createdAt","documentCount"],"properties":{"id":{"type":"string","format":"uuid"},"name":{"type":"string"},"createdAt":{"type":"string","format":"date-time"},"brand":{"oneOf":[{"$ref":"#/components/schemas/ReportBrand"},{"type":"null"}]},"documentCount":{"type":"integer"}}},"ReportBrand":{"description":"Lightweight brand reference attached to a scanner report.","type":"object","required":["id","name"],"properties":{"id":{"type":"string","format":"uuid"},"name":{"type":"string"}}},"ReportPage":{"description":"Page or document captured within a scanner report.","type":"object","required":["documentId","title","fileType","createdAt"],"properties":{"documentId":{"type":"string","format":"uuid"},"title":{"type":"string"},"link":{"oneOf":[{"type":"string"},{"type":"null"}]},"fileType":{"type":"string"},"createdAt":{"type":"string","format":"date-time"},"lastScannedAt":{"oneOf":[{"type":"string","format":"date-time"},{"type":"null"}]}}}}}}
```

## The ScannerJobBrand object

```json
{"openapi":"3.1.0","info":{"title":"Protege External Review API","version":"1.0.1"},"components":{"schemas":{"ScannerJobBrand":{"description":"Brand assigned to a scanner job.","type":"object","required":["id","name"],"properties":{"id":{"type":"string","format":"uuid"},"name":{"type":"string"}}}}}}
```

## The ScannerJobDocumentEvaluationType object

```json
{"openapi":"3.1.0","info":{"title":"Protege External Review API","version":"1.0.1"},"components":{"schemas":{"ScannerJobDocumentEvaluationType":{"description":"Review configuration applied to content discovered by the scanner job.","type":"object","required":["id","name"],"properties":{"id":{"type":"string","format":"uuid"},"name":{"type":"string"}}}}}}
```

## The ScannerJobRunSummary object

```json
{"openapi":"3.1.0","info":{"title":"Protege External Review API","version":"1.0.1"},"components":{"schemas":{"ScannerJobRunSummary":{"description":"High-level status for a single execution of a scanner job.","type":"object","required":["id","status","scheduledTime","createdAt"],"properties":{"id":{"type":"string","format":"uuid"},"status":{"type":"string","enum":["CREATED","RUNNING","FINISHED","FAILED"]},"scheduledTime":{"type":"string","format":"date-time"},"createdAt":{"type":"string","format":"date-time"}}}}}}
```

## The ScannerJobRun object

```json
{"openapi":"3.1.0","info":{"title":"Protege External Review API","version":"1.0.1"},"components":{"schemas":{"ScannerJobRun":{"description":"Detailed execution metadata for a scanner job run.","allOf":[{"$ref":"#/components/schemas/ScannerJobRunSummary"},{"type":"object","required":["updatedAt"],"properties":{"updatedAt":{"type":"string","format":"date-time"}}}]},"ScannerJobRunSummary":{"description":"High-level status for a single execution of a scanner job.","type":"object","required":["id","status","scheduledTime","createdAt"],"properties":{"id":{"type":"string","format":"uuid"},"status":{"type":"string","enum":["CREATED","RUNNING","FINISHED","FAILED"]},"scheduledTime":{"type":"string","format":"date-time"},"createdAt":{"type":"string","format":"date-time"}}}}}}
```

## The ScannerJob object

```json
{"openapi":"3.1.0","info":{"title":"Protege External Review API","version":"1.0.1"},"components":{"schemas":{"ScannerJob":{"description":"Scanner job summary returned by list and create operations.","type":"object","required":["id","urls"],"properties":{"id":{"type":"string","format":"uuid"},"name":{"oneOf":[{"type":"string"},{"type":"null"}]},"urls":{"type":"array","items":{"type":"string","format":"uri"}},"scheduler":{"oneOf":[{"type":"string"},{"type":"null"}]},"brand":{"oneOf":[{"$ref":"#/components/schemas/ScannerJobBrand"},{"type":"null"}]},"documentEvaluationType":{"$ref":"#/components/schemas/ScannerJobDocumentEvaluationType"},"lastRun":{"oneOf":[{"$ref":"#/components/schemas/ScannerJobRunSummary"},{"type":"null"}]}}},"ScannerJobBrand":{"description":"Brand assigned to a scanner job.","type":"object","required":["id","name"],"properties":{"id":{"type":"string","format":"uuid"},"name":{"type":"string"}}},"ScannerJobDocumentEvaluationType":{"description":"Review configuration applied to content discovered by the scanner job.","type":"object","required":["id","name"],"properties":{"id":{"type":"string","format":"uuid"},"name":{"type":"string"}}},"ScannerJobRunSummary":{"description":"High-level status for a single execution of a scanner job.","type":"object","required":["id","status","scheduledTime","createdAt"],"properties":{"id":{"type":"string","format":"uuid"},"status":{"type":"string","enum":["CREATED","RUNNING","FINISHED","FAILED"]},"scheduledTime":{"type":"string","format":"date-time"},"createdAt":{"type":"string","format":"date-time"}}}}}}
```

## The ScannerJobDetail object

```json
{"openapi":"3.1.0","info":{"title":"Protege External Review API","version":"1.0.1"},"components":{"schemas":{"ScannerJobDetail":{"description":"Full scanner job configuration, including crawl and archival options.","allOf":[{"$ref":"#/components/schemas/ScannerJob"},{"type":"object","required":["showAllFeedbackInDecisionStore","translationEnabled"],"properties":{"maxPages":{"oneOf":[{"type":"integer"},{"type":"null"}]},"maxDepth":{"oneOf":[{"type":"integer"},{"type":"null"}]},"maxTrackedPages":{"oneOf":[{"type":"integer"},{"type":"null"}]},"newPagesForSuccessiveScans":{"oneOf":[{"type":"integer"},{"type":"null"}]},"showAllFeedbackInDecisionStore":{"type":"boolean"},"translationEnabled":{"type":"boolean"},"useSitemaps":{"oneOf":[{"type":"boolean"},{"type":"null"}]},"archiveMode":{"oneOf":[{"type":"string","enum":["ON_FOR_ALL","ON_FOR_BRAND_MENTIONED"]},{"type":"null"}]}}}]},"ScannerJob":{"description":"Scanner job summary returned by list and create operations.","type":"object","required":["id","urls"],"properties":{"id":{"type":"string","format":"uuid"},"name":{"oneOf":[{"type":"string"},{"type":"null"}]},"urls":{"type":"array","items":{"type":"string","format":"uri"}},"scheduler":{"oneOf":[{"type":"string"},{"type":"null"}]},"brand":{"oneOf":[{"$ref":"#/components/schemas/ScannerJobBrand"},{"type":"null"}]},"documentEvaluationType":{"$ref":"#/components/schemas/ScannerJobDocumentEvaluationType"},"lastRun":{"oneOf":[{"$ref":"#/components/schemas/ScannerJobRunSummary"},{"type":"null"}]}}},"ScannerJobBrand":{"description":"Brand assigned to a scanner job.","type":"object","required":["id","name"],"properties":{"id":{"type":"string","format":"uuid"},"name":{"type":"string"}}},"ScannerJobDocumentEvaluationType":{"description":"Review configuration applied to content discovered by the scanner job.","type":"object","required":["id","name"],"properties":{"id":{"type":"string","format":"uuid"},"name":{"type":"string"}}},"ScannerJobRunSummary":{"description":"High-level status for a single execution of a scanner job.","type":"object","required":["id","status","scheduledTime","createdAt"],"properties":{"id":{"type":"string","format":"uuid"},"status":{"type":"string","enum":["CREATED","RUNNING","FINISHED","FAILED"]},"scheduledTime":{"type":"string","format":"date-time"},"createdAt":{"type":"string","format":"date-time"}}}}}}
```

## The ScannerJobListResponse object

```json
{"openapi":"3.1.0","info":{"title":"Protege External Review API","version":"1.0.1"},"components":{"schemas":{"ScannerJobListResponse":{"description":"Paginated collection of scanner jobs.","type":"object","required":["scannerJobs","page"],"properties":{"scannerJobs":{"type":"array","items":{"$ref":"#/components/schemas/ScannerJob"}},"page":{"$ref":"#/components/schemas/PageMetadata"}}},"ScannerJob":{"description":"Scanner job summary returned by list and create operations.","type":"object","required":["id","urls"],"properties":{"id":{"type":"string","format":"uuid"},"name":{"oneOf":[{"type":"string"},{"type":"null"}]},"urls":{"type":"array","items":{"type":"string","format":"uri"}},"scheduler":{"oneOf":[{"type":"string"},{"type":"null"}]},"brand":{"oneOf":[{"$ref":"#/components/schemas/ScannerJobBrand"},{"type":"null"}]},"documentEvaluationType":{"$ref":"#/components/schemas/ScannerJobDocumentEvaluationType"},"lastRun":{"oneOf":[{"$ref":"#/components/schemas/ScannerJobRunSummary"},{"type":"null"}]}}},"ScannerJobBrand":{"description":"Brand assigned to a scanner job.","type":"object","required":["id","name"],"properties":{"id":{"type":"string","format":"uuid"},"name":{"type":"string"}}},"ScannerJobDocumentEvaluationType":{"description":"Review configuration applied to content discovered by the scanner job.","type":"object","required":["id","name"],"properties":{"id":{"type":"string","format":"uuid"},"name":{"type":"string"}}},"ScannerJobRunSummary":{"description":"High-level status for a single execution of a scanner job.","type":"object","required":["id","status","scheduledTime","createdAt"],"properties":{"id":{"type":"string","format":"uuid"},"status":{"type":"string","enum":["CREATED","RUNNING","FINISHED","FAILED"]},"scheduledTime":{"type":"string","format":"date-time"},"createdAt":{"type":"string","format":"date-time"}}},"PageMetadata":{"description":"Standard offset-based pagination metadata.","type":"object","required":["limit","offset","count","total"],"properties":{"limit":{"type":"integer","default":25},"offset":{"type":"integer","default":0},"count":{"type":"integer"},"total":{"type":"integer"}}}}}}
```

## The ScannerJobDetailResponse object

```json
{"openapi":"3.1.0","info":{"title":"Protege External Review API","version":"1.0.1"},"components":{"schemas":{"ScannerJobDetailResponse":{"description":"Wrapper containing a single scanner job record.","type":"object","required":["scannerJob"],"properties":{"scannerJob":{"$ref":"#/components/schemas/ScannerJobDetail"}}},"ScannerJobDetail":{"description":"Full scanner job configuration, including crawl and archival options.","allOf":[{"$ref":"#/components/schemas/ScannerJob"},{"type":"object","required":["showAllFeedbackInDecisionStore","translationEnabled"],"properties":{"maxPages":{"oneOf":[{"type":"integer"},{"type":"null"}]},"maxDepth":{"oneOf":[{"type":"integer"},{"type":"null"}]},"maxTrackedPages":{"oneOf":[{"type":"integer"},{"type":"null"}]},"newPagesForSuccessiveScans":{"oneOf":[{"type":"integer"},{"type":"null"}]},"showAllFeedbackInDecisionStore":{"type":"boolean"},"translationEnabled":{"type":"boolean"},"useSitemaps":{"oneOf":[{"type":"boolean"},{"type":"null"}]},"archiveMode":{"oneOf":[{"type":"string","enum":["ON_FOR_ALL","ON_FOR_BRAND_MENTIONED"]},{"type":"null"}]}}}]},"ScannerJob":{"description":"Scanner job summary returned by list and create operations.","type":"object","required":["id","urls"],"properties":{"id":{"type":"string","format":"uuid"},"name":{"oneOf":[{"type":"string"},{"type":"null"}]},"urls":{"type":"array","items":{"type":"string","format":"uri"}},"scheduler":{"oneOf":[{"type":"string"},{"type":"null"}]},"brand":{"oneOf":[{"$ref":"#/components/schemas/ScannerJobBrand"},{"type":"null"}]},"documentEvaluationType":{"$ref":"#/components/schemas/ScannerJobDocumentEvaluationType"},"lastRun":{"oneOf":[{"$ref":"#/components/schemas/ScannerJobRunSummary"},{"type":"null"}]}}},"ScannerJobBrand":{"description":"Brand assigned to a scanner job.","type":"object","required":["id","name"],"properties":{"id":{"type":"string","format":"uuid"},"name":{"type":"string"}}},"ScannerJobDocumentEvaluationType":{"description":"Review configuration applied to content discovered by the scanner job.","type":"object","required":["id","name"],"properties":{"id":{"type":"string","format":"uuid"},"name":{"type":"string"}}},"ScannerJobRunSummary":{"description":"High-level status for a single execution of a scanner job.","type":"object","required":["id","status","scheduledTime","createdAt"],"properties":{"id":{"type":"string","format":"uuid"},"status":{"type":"string","enum":["CREATED","RUNNING","FINISHED","FAILED"]},"scheduledTime":{"type":"string","format":"date-time"},"createdAt":{"type":"string","format":"date-time"}}}}}}
```

## The ScannerJobRunsResponse object

```json
{"openapi":"3.1.0","info":{"title":"Protege External Review API","version":"1.0.1"},"components":{"schemas":{"ScannerJobRunsResponse":{"description":"Paginated collection of historical runs for a scanner job.","type":"object","required":["scannerRuns","page"],"properties":{"scannerRuns":{"type":"array","items":{"$ref":"#/components/schemas/ScannerJobRun"}},"page":{"$ref":"#/components/schemas/PageMetadata"}}},"ScannerJobRun":{"description":"Detailed execution metadata for a scanner job run.","allOf":[{"$ref":"#/components/schemas/ScannerJobRunSummary"},{"type":"object","required":["updatedAt"],"properties":{"updatedAt":{"type":"string","format":"date-time"}}}]},"ScannerJobRunSummary":{"description":"High-level status for a single execution of a scanner job.","type":"object","required":["id","status","scheduledTime","createdAt"],"properties":{"id":{"type":"string","format":"uuid"},"status":{"type":"string","enum":["CREATED","RUNNING","FINISHED","FAILED"]},"scheduledTime":{"type":"string","format":"date-time"},"createdAt":{"type":"string","format":"date-time"}}},"PageMetadata":{"description":"Standard offset-based pagination metadata.","type":"object","required":["limit","offset","count","total"],"properties":{"limit":{"type":"integer","default":25},"offset":{"type":"integer","default":0},"count":{"type":"integer"},"total":{"type":"integer"}}}}}}
```

## The ScannerJobUpdateRequest object

```json
{"openapi":"3.1.0","info":{"title":"Protege External Review API","version":"1.0.1"},"components":{"schemas":{"ScannerJobUpdateRequest":{"description":"Partial update payload for a scanner job. Include only the fields you want to change.","type":"object","minProperties":1,"properties":{"name":{"type":"string"},"urls":{"type":"array","minItems":1,"items":{"type":"string","format":"uri"}},"scheduler":{"oneOf":[{"type":"string"},{"type":"null"}]},"documentEvaluationTypeId":{"type":"string","format":"uuid"},"brandId":{"oneOf":[{"type":"string","format":"uuid"},{"type":"null"}]},"maxPages":{"type":"integer"},"maxDepth":{"type":"integer"},"maxTrackedPages":{"type":"integer","minimum":1},"newPagesForSuccessiveScans":{"type":"integer","minimum":0},"showAllFeedbackInDecisionStore":{"type":"boolean"},"translationEnabled":{"type":"boolean"},"useSitemaps":{"type":"boolean"},"archiveMode":{"oneOf":[{"type":"string","enum":["ON_FOR_ALL","ON_FOR_BRAND_MENTIONED"]},{"type":"null"}]}}}}}}
```

## The ScannerJobCreateRequest object

```json
{"openapi":"3.1.0","info":{"title":"Protege External Review API","version":"1.0.1"},"components":{"schemas":{"ScannerJobCreateRequest":{"description":"Request body used to create a new scanner job.","type":"object","required":["name","documentEvaluationTypeId","urls"],"properties":{"name":{"type":"string"},"documentEvaluationTypeId":{"type":"string","format":"uuid"},"urls":{"type":"array","items":{"type":"string","format":"uri"}},"scheduler":{"type":"string"},"maxPages":{"type":"integer"},"maxDepth":{"type":"integer"},"maxTrackedPages":{"type":"integer","minimum":1},"newPagesForSuccessiveScans":{"type":"integer","minimum":0},"brandId":{"oneOf":[{"type":"string","format":"uuid"},{"type":"null"}]},"showAllFeedbackInDecisionStore":{"type":"boolean"},"translationEnabled":{"type":"boolean"},"useSitemaps":{"type":"boolean"},"archiveMode":{"oneOf":[{"type":"string","enum":["ON_FOR_ALL","ON_FOR_BRAND_MENTIONED"]},{"type":"null"}]}}}}}}
```

## The ScannerJobCreateResponse object

```json
{"openapi":"3.1.0","info":{"title":"Protege External Review API","version":"1.0.1"},"components":{"schemas":{"ScannerJobCreateResponse":{"description":"Wrapper returned after a scanner job is created successfully.","type":"object","required":["scannerJob"],"properties":{"scannerJob":{"$ref":"#/components/schemas/ScannerJob"}}},"ScannerJob":{"description":"Scanner job summary returned by list and create operations.","type":"object","required":["id","urls"],"properties":{"id":{"type":"string","format":"uuid"},"name":{"oneOf":[{"type":"string"},{"type":"null"}]},"urls":{"type":"array","items":{"type":"string","format":"uri"}},"scheduler":{"oneOf":[{"type":"string"},{"type":"null"}]},"brand":{"oneOf":[{"$ref":"#/components/schemas/ScannerJobBrand"},{"type":"null"}]},"documentEvaluationType":{"$ref":"#/components/schemas/ScannerJobDocumentEvaluationType"},"lastRun":{"oneOf":[{"$ref":"#/components/schemas/ScannerJobRunSummary"},{"type":"null"}]}}},"ScannerJobBrand":{"description":"Brand assigned to a scanner job.","type":"object","required":["id","name"],"properties":{"id":{"type":"string","format":"uuid"},"name":{"type":"string"}}},"ScannerJobDocumentEvaluationType":{"description":"Review configuration applied to content discovered by the scanner job.","type":"object","required":["id","name"],"properties":{"id":{"type":"string","format":"uuid"},"name":{"type":"string"}}},"ScannerJobRunSummary":{"description":"High-level status for a single execution of a scanner job.","type":"object","required":["id","status","scheduledTime","createdAt"],"properties":{"id":{"type":"string","format":"uuid"},"status":{"type":"string","enum":["CREATED","RUNNING","FINISHED","FAILED"]},"scheduledTime":{"type":"string","format":"date-time"},"createdAt":{"type":"string","format":"date-time"}}}}}}
```


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://gitbook.tryprotege.com/review/getting-started/api-reference/models.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
