Palo Alto Networks Scan API
Operations for creating and managing scan jobs.
Operations for creating and managing scan jobs.
openapi: 3.2.0
info:
title: Prisma AIRS Red Teaming Dataplane Scan API
description: Red Teaming Data Plane API - Data processing and scanning services for AI/ML model security. © 2025 Palo Alto Networks, Inc
version: 0.7.75
termsOfService: https://www.paloaltonetworks.com/content/dam/pan/en_US/assets/pdf/legal/palo-alto-networks-end-user-license-agreement-eula.pdf
license:
name: MIT
url: https://opensource.org/license/mit
contact:
email: support@paloaltonetworks.com
name: Palo Alto Networks Technical Support
url: https://support.paloaltonetworks.com
servers:
- url: https://api.sase.paloaltonetworks.com/ai-red-teaming/data-plane
security:
- bearerAuth: []
tags:
- name: Scan
description: Operations for creating and managing scan jobs.
paths:
/v1/scan:
post:
tags:
- Scan
summary: Create scan
description: Create a new scan target.
operationId: create_job_v1_scan_post
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/JobCreateRequestSchema'
responses:
200:
description: Successful Response
content:
application/json:
schema:
$ref: '#/components/schemas/JobResponseSchema'
422:
description: Validation Error
content:
application/json:
schema:
$ref: '#/components/schemas/HTTPValidationError'
get:
tags:
- Scan
summary: List scans
description: List jobs with filtering and pagination.
operationId: list_jobs_v1_scan_get
parameters:
- name: limit
in: query
required: false
schema:
type: integer
maximum: 100
minimum: 1
description: Number of jobs to return (1-100)
default: 50
title: Limit
description: Number of jobs to return (1-100)
- name: skip
in: query
required: false
schema:
type: integer
minimum: 0
description: Number of jobs to skip for pagination
default: 0
title: Skip
description: Number of jobs to skip for pagination
- name: status
in: query
required: false
schema:
anyOf:
- $ref: '#/components/schemas/JobStatusFilter'
- type: 'null'
description: Filter by job status
title: Status
description: Filter by job status
- name: job_type
in: query
required: false
schema:
anyOf:
- $ref: '#/components/schemas/JobType'
- type: 'null'
description: Filter by job type
title: Job Type
description: Filter by job type
- name: search
in: query
required: false
schema:
anyOf:
- type: string
maxLength: 255
- type: 'null'
description: Search jobs by name
title: Search
description: Search jobs by name
- name: target_id
in: query
required: false
schema:
anyOf:
- type: string
format: uuid
- type: 'null'
description: Filter by target UUID
title: Target Id
description: Filter by target UUID
responses:
200:
description: Successful Response
content:
application/json:
schema:
$ref: '#/components/schemas/JobListResponseSchema'
422:
description: Validation Error
content:
application/json:
schema:
$ref: '#/components/schemas/HTTPValidationError'
/v1/scan/{job_id}:
get:
tags:
- Scan
summary: Get scan details
description: Get a job by its ID.
operationId: get_job_v1_scan__job_id__get
parameters:
- name: job_id
in: path
required: true
schema:
type: string
format: uuid
title: Job Id
responses:
200:
description: Successful Response
content:
application/json:
schema:
$ref: '#/components/schemas/JobResponseSchema'
422:
description: Validation Error
content:
application/json:
schema:
$ref: '#/components/schemas/HTTPValidationError'
/v1/scan/{job_id}/abort:
post:
tags:
- Scan
summary: Abort scan
description: Abort a running job by cancelling its workflow and updating status.
operationId: abort_job_v1_scan__job_id__abort_post
parameters:
- name: job_id
in: path
required: true
schema:
type: string
format: uuid
title: Job Id
responses:
200:
description: Successful Response
content:
application/json:
schema:
$ref: '#/components/schemas/JobAbortResponseSchema'
422:
description: Validation Error
content:
application/json:
schema:
$ref: '#/components/schemas/HTTPValidationError'
components:
schemas:
StaticJobMetadata:
properties:
rate_limit_enabled:
type: boolean
title: Rate Limit Enabled
default: false
rate_limit:
anyOf:
- type: integer
- type: 'null'
title: Rate Limit
rate_limit_error_code:
anyOf:
- type: integer
- type: 'null'
title: Rate Limit Error Code
rate_limit_error_message:
anyOf:
- type: string
- type: 'null'
title: Rate Limit Error Message
rate_limit_error_json:
anyOf:
- additionalProperties: true
type: object
- type: 'null'
title: Rate Limit Error Json
content_filter_enabled:
type: boolean
title: Content Filter Enabled
description: Enable content filtering
default: false
content_filter_error_code:
anyOf:
- type: integer
maximum: 599.0
minimum: 400.0
- type: 'null'
title: Content Filter Error Code
description: HTTP error code for content filter (400-599)
content_filter_error_message:
anyOf:
- type: string
- type: 'null'
title: Content Filter Error Message
description: Content filter error message
content_filter_error_json:
anyOf:
- additionalProperties: true
type: object
- type: 'null'
title: Content Filter Error Json
language:
anyOf:
- $ref: '#/components/schemas/LanguageOptionSchema'
- type: 'null'
description: Language for this scan. None = English.
categories:
additionalProperties:
items:
anyOf:
- $ref: '#/components/schemas/SecuritySubCategory'
- $ref: '#/components/schemas/SafetySubCategory'
- $ref: '#/components/schemas/BrandSubCategory'
- $ref: '#/components/schemas/ComplianceSubCategory'
type: array
propertyNames:
$ref: '#/components/schemas/Category'
type: object
title: Categories
description: Attack categories and their subcategories
example:
COMPLIANCE:
- OWASP
- NIST
SAFETY:
- BIAS
SECURITY:
- ADVERSARIAL_SUFFIX
- JAILBREAK
include_file_attacks:
type: boolean
title: Include File Attacks
description: 'Start-scan toggle: when true, include multimodal file (document) attacks alongside text for the selected categories — but only for targets whose validation probe found them file-capable. When false (default), the scan is text-only.'
default: false
type: object
required:
- categories
title: StaticJobMetadata
description: Enhanced metadata for static attack jobs with validation.
AuthType:
type: string
enum:
- HEADERS
- BASIC_AUTH
- OAUTH2
- CUSTOM_TARGET_ADAPTER
title: AuthType
description: Authentication method for target API access.
PaginationSchema:
properties:
total_items:
anyOf:
- type: integer
- type: 'null'
title: Total Items
type: object
title: PaginationSchema
Category:
type: string
enum:
- SECURITY
- SAFETY
- COMPLIANCE
- BRAND
title: Category
ResponseMode:
type: string
enum:
- REST
- STREAMING
- WEBSOCKET
- WEBSOCKET_STREAMING
title: ResponseMode
description: Response mode for target interactions.
GoalCategory:
type: string
enum:
- GOAL_MANIPULATION
- PRIVILEGE_MISUSE
- TOOL_MISUSE
- TOOL_CHAINING
- TOXIC_CONTENT_GENERATION
- CUSTOM
title: GoalCategory
ClaraJobMetadata:
properties:
scan_name:
type: string
maxLength: 255
minLength: 3
title: Scan Name
categories:
additionalProperties:
items:
anyOf:
- $ref: '#/components/schemas/SecuritySubCategory'
- $ref: '#/components/schemas/SafetySubCategory'
- $ref: '#/components/schemas/BrandSubCategory'
- $ref: '#/components/schemas/ComplianceSubCategory'
type: array
propertyNames:
$ref: '#/components/schemas/Category'
type: object
title: Categories
description: Auto-derived from uploaded prompt data — determines report sections
language:
type: 'null'
title: Language
description: Always None — CLARA is English-only
type: object
required:
- scan_name
title: ClaraJobMetadata
description: 'Metadata for CLARA scan jobs. Intentionally minimal —
no rate_limit/content_filter since CLARA doesn''t execute attacks.
'
DynamicJobMetadata:
properties:
rate_limit_enabled:
type: boolean
title: Rate Limit Enabled
default: false
rate_limit:
anyOf:
- type: integer
- type: 'null'
title: Rate Limit
rate_limit_error_code:
anyOf:
- type: integer
- type: 'null'
title: Rate Limit Error Code
rate_limit_error_message:
anyOf:
- type: string
- type: 'null'
title: Rate Limit Error Message
rate_limit_error_json:
anyOf:
- additionalProperties: true
type: object
- type: 'null'
title: Rate Limit Error Json
content_filter_enabled:
type: boolean
title: Content Filter Enabled
description: Enable content filtering
default: false
content_filter_error_code:
anyOf:
- type: integer
maximum: 599.0
minimum: 400.0
- type: 'null'
title: Content Filter Error Code
description: HTTP error code for content filter (400-599)
content_filter_error_message:
anyOf:
- type: string
- type: 'null'
title: Content Filter Error Message
description: Content filter error message
content_filter_error_json:
anyOf:
- additionalProperties: true
type: object
- type: 'null'
title: Content Filter Error Json
language:
anyOf:
- $ref: '#/components/schemas/LanguageOptionSchema'
- type: 'null'
description: Language for this scan. None = English.
stream_breadth:
type: integer
maximum: 20.0
minimum: 1.0
title: Stream Breadth
description: Number of parallel attack streams (1-20)
default: 6
stream_depth:
type: integer
maximum: 20.0
minimum: 1.0
title: Stream Depth
description: Depth of each attack stream (1-20)
default: 10
max_tokens:
type: integer
maximum: 4096.0
minimum: 128.0
title: Max Tokens
description: Maximum tokens per response (128-4096)
default: 256
context_size:
type: integer
maximum: 20.0
minimum: 1.0
title: Context Size
description: Context window size (1-20)
default: 10
attack_goals:
items:
type: string
type: array
title: Attack Goals
description: List of attack objectives
base_model:
anyOf:
- type: string
- type: 'null'
title: Base Model
description: Base model identifier
use_case:
anyOf:
- type: string
- type: 'null'
title: Use Case
description: Attack use case description
system_prompt:
anyOf:
- type: string
- type: 'null'
title: System Prompt
description: Custom system prompt
goal_categories:
anyOf:
- items:
$ref: '#/components/schemas/GoalCategory'
type: array
- type: 'null'
title: Goal Categories
description: 'Selected goal categories for this scan. Valid values: GOAL_MANIPULATION, PRIVILEGE_MISUSE, TOOL_MISUSE, TOOL_CHAINING, TOXIC_CONTENT_GENERATION. Only used when goal_categories feature flag is enabled.'
type: object
title: DynamicJobMetadata
description: Enhanced metadata for dynamic attack jobs with proper constraints.
CountedQuotaEnum:
type: string
enum:
- HELD
- COUNTED
- NOT_COUNTED
title: CountedQuotaEnum
description: Enum for counting Quota.
TargetBackground:
properties:
industry:
anyOf:
- type: string
- type: 'null'
title: Industry
description: Target's industry (e.g., Healthcare, Finance)
use_case:
anyOf:
- type: string
- type: 'null'
title: Use Case
description: Primary use case (e.g., Customer Support, Code Assistant)
competitors:
anyOf:
- items:
type: string
type: array
- type: 'null'
title: Competitors
description: Known competitor products
agentic_profiling_enabled:
type: boolean
title: Agentic Profiling Enabled
description: Whether agentic profiling is enabled for this target
default: true
type: object
title: TargetBackground
description: 'Target background - used in create/update API requests and stored in DB/GCS.
Required fields for activation:
- industry (string, required)
- use_case (string, required)
Optional field:
- competitors (list of strings)
'
TargetAdditionalContext:
properties:
base_model:
anyOf:
- type: string
- type: 'null'
title: Base Model
description: Base model name (e.g., GPT-4, Claude)
core_architecture:
anyOf:
- type: string
- type: 'null'
title: Core Architecture
description: Core architecture details
system_prompt:
anyOf:
- type: string
- type: 'null'
title: System Prompt
description: System prompt
languages_supported:
anyOf:
- items:
type: string
type: array
- type: 'null'
title: Languages Supported
description: Supported languages
banned_keywords:
anyOf:
- items:
type: string
type: array
- type: 'null'
title: Banned Keywords
description: Banned keywords/phrases
tools_accessible:
anyOf:
- items:
type: string
type: array
- type: 'null'
title: Tools Accessible
description: Accessible tools/capabilities
type: object
title: TargetAdditionalContext
description: 'Additional context - used in create/update API requests and stored in DB/GCS.
Single value fields are strings.
List fields are lists of strings.
'
CustomJobMetadata:
properties:
rate_limit_enabled:
type: boolean
title: Rate Limit Enabled
default: false
rate_limit:
anyOf:
- type: integer
- type: 'null'
title: Rate Limit
rate_limit_error_code:
anyOf:
- type: integer
- type: 'null'
title: Rate Limit Error Code
rate_limit_error_message:
anyOf:
- type: string
- type: 'null'
title: Rate Limit Error Message
rate_limit_error_json:
anyOf:
- additionalProperties: true
type: object
- type: 'null'
title: Rate Limit Error Json
content_filter_enabled:
type: boolean
title: Content Filter Enabled
description: Enable content filtering
default: false
content_filter_error_code:
anyOf:
- type: integer
maximum: 599.0
minimum: 400.0
- type: 'null'
title: Content Filter Error Code
description: HTTP error code for content filter (400-599)
content_filter_error_message:
anyOf:
- type: string
- type: 'null'
title: Content Filter Error Message
description: Content filter error message
content_filter_error_json:
anyOf:
- additionalProperties: true
type: object
- type: 'null'
title: Content Filter Error Json
language:
anyOf:
- $ref: '#/components/schemas/LanguageOptionSchema'
- type: 'null'
description: Language for this scan. None = English.
custom_prompt_sets:
items:
type: string
format: uuid
type: array
minItems: 1
title: Custom Prompt Sets
description: List of custom prompt set UUIDs
type: object
required:
- custom_prompt_sets
title: CustomJobMetadata
description: Enhanced metadata for custom attack jobs.
TargetMetadata:
properties:
multi_turn:
type: boolean
title: Multi Turn
description: Whether target supports multi-turn conversations (Probe 2 result)
default: false
multi_turn_error_message:
anyOf:
- type: string
- type: 'null'
title: Multi Turn Error Message
description: Concise error message if Probe 2 failed
examples:
- Session ID extraction failed
- Assistant role not configured
supports_multimodal_files:
type: boolean
title: Supports Multimodal Files
description: Whether the target accepted a sample file attack at validation time (Probe 3). When False, scans against this target run text-only.
default: false
supports_multimodal_files_error_message:
anyOf:
- type: string
- type: 'null'
title: Supports Multimodal Files Error Message
description: Concise error message if the multimodal file probe failed
examples:
- 'HTTP 400: target rejected file payload'
- File delivery not configured
rate_limit:
anyOf:
- type: integer
- type: 'null'
title: Rate Limit
description: Current rate limit value
examples:
- 996
rate_limit_enabled:
type: boolean
title: Rate Limit Enabled
description: Whether rate limiting is enabled
default: false
rate_limit_error_code:
anyOf:
- type: integer
- type: 'null'
title: Rate Limit Error Code
description: HTTP status code for rate limit errors
examples:
- 429
rate_limit_error_json:
anyOf:
- additionalProperties: true
type: object
- type: 'null'
title: Rate Limit Error Json
description: JSON structure of rate limit error response
examples:
- error:
code: rate_limit_exceeded
message: 'Rate limit reached for o1-preview on requests per min (RPM): Limit 20, Used 20, Requested 1. Please try again in 3s. Visit https://platform.openai.com/account/rate-limits to learn more.'
param: 'null'
type: requests
rate_limit_error_message:
anyOf:
- type: string
- type: 'null'
title: Rate Limit Error Message
description: Raw error message string for rate limit errors
examples:
- 'Rate limit reached for o1-preview on requests per min (RPM): Limit 20, Used 20, Requested 1. Please try again in 3s.'
content_filter_enabled:
type: boolean
title: Content Filter Enabled
description: Whether content filtering is enabled
default: false
content_filter_error_code:
anyOf:
- type: integer
- type: 'null'
title: Content Filter Error Code
description: HTTP status code for content filter errors
examples:
- 400
content_filter_error_json:
anyOf:
- additionalProperties: true
type: object
- type: 'null'
title: Content Filter Error Json
description: JSON structure of content filter error response
examples:
- error:
code: invalid_prompt
message: 'Invalid prompt: your prompt was flagged as potentially violating our usage policy. Please try again with a different prompt.'
type: invalid_request_error
content_filter_error_message:
anyOf:
- type: string
- type: 'null'
title: Content Filter Error Message
description: Raw error message string for content filter errors
examples:
- 'Invalid prompt: your prompt was flagged as potentially violating our usage policy. Please try again with a different prompt.'
probe_message:
type: string
title: Probe Message
default: Hello, this is a test message from the red team validation system.
request_timeout:
type: number
title: Request Timeout
description: Request timeout in seconds
default: 110
examples:
- 110
type: object
title: TargetMetadata
description: 'Metadata stored in the database for targets (user-provided + computed fields).
Inherits the multimodal-capability fields from ``MultiModalResult`` and the
multi-turn fields from ``MultiTurnResult``. The base order
``(MultiModalResult, MultiTurnResult)`` keeps the serialized field order
``multi_turn, multi_turn_error_message, supports_multimodal_files,
supports_multimodal_files_error_message, rate_limit, …`` identical to before this
refactor — which preserves the Restate journal bytes for pre-V4 in-flight scans.
'
StaticJobReportStats:
properties:
output_completion_percentage:
type: number
minimum: 0.0
title: Output Completion Percentage
description: Percentage of attack outputs that completed successfully (0-100)
partial_report_unlocked:
type: boolean
title: Partial Report Unlocked
description: Whether user has unlocked this partial report with a credit
default: false
partial_report_unlocked_at:
anyOf:
- type: string
format: date-time
- type: 'null'
title: Partial Report Unlocked At
description: Timestamp when the partial report was unlocked
report_summary:
anyOf:
- type: string
- type: 'null'
title: Report Summary
description: Report summary from the LLM for the statics job run
type: object
required:
- output_completion_percentage
title: StaticJobReportStats
description: 'Report statistics for static jobs stored in job.report_stats JSONB field.
Tracks output completion and partial report unlock status.
'
JobType:
type: string
enum:
- STATIC
- DYNAMIC
- CUSTOM
- CLARA
title: JobType
description: Type of job execution.
JobAbortResponseSchema:
properties:
job_id:
type: string
format: uuid
title: Job Id
description: UUID of the aborted job
message:
type: string
title: Message
description: Status message
type: object
required:
- job_id
- message
title: JobAbortResponseSchema
description: Response schema for job abort operation.
JobCreateRequestSchema:
properties:
name:
type: string
maxLength: 255
minLength: 3
title: Name
description: Job name (3-255 characters)
target:
$ref: '#/components/schemas/TargetJobRequest'
description: Target reference for job creation
job_type:
$ref: '#/components/schemas/JobType'
description: Type of job to execute
job_metadata:
anyOf:
- $ref: '#/components/schemas/StaticJobMetadata'
- $ref: '#/components/schemas/DynamicJobMetadata'
- $ref: '#/components/schemas/CustomJobMetadata'
- $ref: '#/components/schemas/ClaraJobMetadata'
title: Job Metadata
description: Job-specific metadata
version:
anyOf:
- type: integer
- type: 'null'
title: Version
description: Job version
extra_info:
anyOf:
- additionalProperties: true
type: object
- type: 'null'
title: Extra Info
additionalProperties: false
type: object
required:
- name
- target
- job_type
- job_metadata
title: JobCreateRequestSchema
description: Request schema for creating jobs.
TargetReferenceSchema:
properties:
uuid:
type: string
format: uuid
title: Uuid
tsg_id:
type: string
title: Tsg Id
name:
type: string
title: Name
description: Target name
examples:
- GPT 4.1 Nano
description:
anyOf:
- type: string
- type: 'null'
title: Description
description: Optional target description
default: null
examples:
- AI model for testing
target_type:
anyOf:
- $ref: '#/components/schemas/TargetType'
- type: 'null'
description: Type of target
connection_type:
anyOf:
- $ref: '#/components/schemas/TargetConnectionType'
- type: 'null'
description: Connection type/provider for the target
examples:
- CUSTOM
- OPENAI
- BEDROCK
api_endpoint_type:
anyOf:
- $ref: '#/components/schemas/ApiEndpointType'
- type: 'null'
description: Accessibility type of the API endpoint
examples:
- PUBLIC
- PRIVATE
- NETWORK_BROKER
response_mode:
anyOf:
- $ref: '#/components/schemas/ResponseMode'
- type: 'null'
description: Response mode for API interactions
examples:
- REST
- STREAMING
- WEBSOCKET
auth_type:
anyOf:
- $ref: '#/components/schemas/AuthType'
- type: 'null'
description: Authentication method for target API access
examples:
- HEADERS
- BASIC_AUTH
- OAUTH2
session_supported:
type: boolean
title: Session Supported
description: Whether target supports session for multi-turn conversations
default: false
extra_info:
anyOf:
- additionalProperties: true
type: object
- type: 'null'
title: Extra Info
description: Additional configuration or metadata for the target
default: {}
examples:
- custom_key: custom_value
adapter_uuid:
anyOf:
- type: string
format: uuid
- type: 'null'
title: Adapter Uuid
description: Custom adapter this target uses. Required when connection_type is CUSTOM_TARGET_ADAPTER; must be null for every other connection type.
status:
$ref: '#/components/schemas/TargetStatus'
description: Target status
active:
type: boolean
title: Active
description: Whether target is active
validated:
type: boolean
title: Validated
description: Whether target is validated
version:
anyOf:
- type: integer
- type: 'null'
title: Version
description: Configuration version
secret_version:
anyOf:
- type: string
- type: 'null'
title: Secret Version
description: Secret Manager version for connection_params. When present, sensitive connection data is stored in Secret Manager. When None, connection_params are stored in GCS (legacy).
created_by_user_id:
anyOf:
- type: string
format: uuid
- type: 'null'
title: Created By User Id
description: User ID of target creator
updated_by_user_id:
anyOf:
- type: string
format: uuid
- type: 'null'
title: Updated By User Id
description: User ID of last target updater
created_at:
type: string
format: date-time
title: Created At
description: Creation timestamp
updated_at:
type: string
format: date-time
title: Updated At
description: Last update timestamp
profiling_status:
anyOf:
- $ref: '#/components/schemas/ProfilingStatus'
- type: 'null'
description: Status of the profiling workflow
canonical_id:
anyOf:
- type: string
- type: 'null'
title: Canonical Id
description: Partner-supplied stable identifier. Null for targets without partner integration metadata (most targets).
target_metadata:
$ref: '#/components/schemas/TargetMetadata'
description: Target metadata and configuration options
adapter_secret_version:
anyOf:
- type: string
- type: 'null'
title: Adapter Secret Version
description: Frozen Secret Manager version of the referenced adapter, pinned at scan (job) creation so an adapter edited mid-scan doesn't change the script/secrets that scan uses. Server-managed; null for non-adapter targets.
target_background:
anyOf:
- $ref: '#/components/schemas/TargetBackground'
- type: 'null'
description: 'Target background info: industry, use_case, competitors'
profiling_progress:
anyOf:
- type: integer
- t
# --- truncated at 32 KB (43 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/palo-alto-networks/refs/heads/main/openapi/palo-alto-networks-scan-api-openapi.yml