Files
riposte-marketplace/integrations/cortex-xdr/manifest.yaml
T
f3nris bf273b959a feat(cortex-xdr): watermark incidents on modification_time, not creation
An XDR incident is not finished when it is created. Alerts keep joining it, an
analyst changes its status, its severity is raised. A creation_time watermark
fetches it once, the watermark moves past it, and nothing that happens
afterwards ever reaches Riposte — which is precisely the content the full fetch
exists to bring in.

modified_after filters and sorts on modification_time instead, so an incident
comes back on every change and dedup on incident_id turns the second visit into
an enrichment of the incident already there. It is now what the ingest hint
prefills; created_after stays for a one-shot backfill.

Worth knowing about that enrichment: it merges context and can fill a detection
anchor that was missing, but it does not restate the incident's severity or
status. An incident XDR later raises to critical stays at the severity it was
ingested with.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-18 23:50:24 +02:00

602 lines
31 KiB
YAML

id: cortex_xdr
name: Cortex XDR
version: 1.3.1
description: "Palo Alto Cortex XDR (public API v1) — incident and alert ingestion + write-back, endpoint isolation/scan/delete/tagging, RTR scripts, hash block/allow lists, file quarantine/restore/retrieval, alert exclusions, external alert push (parsed/CEF), device-control violations, audits, distributions and RBAC/risk."
changelog: "1.3.1 — get_incidents_full can watermark on modification_time (modified_after), which is what ingestion wants: an XDR incident keeps growing after creation, and a creation_time watermark fetches it once and never looks again, so every alert that joins it afterwards is lost. The full-incident fetch command is named cortex-xdr-get-incidents-full (id get_incidents_full), not cortex-xdr-fetch-incidents: sitting next to cortex-xdr-get-incidents in the command list, it now reads as what it is — the same call, everything included. A rule created against the old id must be pointed at the new one. 1.3.0 — Richer incident ingestion (get_incidents_full, on get_multiple_incidents_extra_data): incidents now arrive with their alerts in full and their file/network artifacts, where get_incidents only ever answered a 21-field summary carrying neither hosts, users, MITRE nor a single alert. Alert ingestion, and the alerts endpoint answers at last: get_alerts was sending the incidents dialect ({filters, search_from, search_to, sort}) to a grid endpoint that speaks request_data.filter_data (SEARCH_FIELD/SEARCH_TYPE/SEARCH_VALUE blocks, paging.from/to, sort as a list), and every call came back HTTP 500. Body rebuilt from the reference client, rows unwrapped out of their alert_fields envelope, severity code and the dotted status.progress key derived into readable fields. Alert ingestion: get_alerts is now a fetch command (results path reply.alerts, dedup on alert_id, incremental on source_insert_ts) with a bundled OCSF mapper and a Cortex XDR Alert incident type, so detections can be ingested alongside — or instead of — incidents. The incident mapper is fixed on the way past: its severity expression compared strings, which the mapping engine cannot do, so every ingested incident silently took the rule's default severity; it also now carries a detection anchor so MTTD is measurable. It pages past the API's 100-results-per-call ceiling, and sorts oldest-first on an incremental fetch so a truncated window drops the alerts the next poll can still see. 1.2.1 — Connection troubleshooting: the URL is normalised to the tenant host (a pasted /public_api/v1 or console path no longer breaks the call), a non-JSON reply reports the status, content type and body instead of a bare JSON parse error, missing key/key ID is caught up front, nonce and timestamp are sent in both auth modes as the reference client does, and test_connection now probes get_incidents. 1.2.0 — Incident write-back (update_incident: status/severity/assignment/resolve comment) and external alert push (insert_parsed_alerts, insert_cef_alerts). 1.1.0 — Full command coverage: added delete/alias/tag endpoints, abort scan, original alerts, script metadata/code/snippet/exec-status, file retrieval (+details), alert exclusions, device-control violations, audits, distribution url/status/create and RBAC (users, roles, groups, risk score, risky users/hosts). 1.0.0 — Initial release: incident ingestion (get_incidents) with OCSF mapper, endpoints, isolate/unisolate, scan, hash blocklist/allowlist, quarantine/restore, run script + results, alerts retrieval, distributions and action status. Standard or Advanced API authentication."
category: endpoint
# Per-instance configuration. The base URL is the tenant API root, e.g.
# https://api-yourtenant.xdr.eu.paloaltonetworks.com (scripts append /public_api/v1).
config_schema:
properties:
url:
type: string
description: "Tenant API host — Settings → Configurations → API Keys → Copy URL, e.g. https://api-<tenant>.xdr.<region>.paloaltonetworks.com. Not the console URL you log into (that one answers with HTML, not JSON)."
api_key_id:
type: string
description: "API Key ID (the integer ID shown next to the API key in Settings → API Keys)"
api_key:
type: string
description: "API Key secret"
x-soar-sensitive: true
auth_type:
type: string
description: "How the key was created in Cortex XDR: standard (key sent as-is) or advanced (nonce + timestamp SHA-256 hash). A mismatch here is rejected with 401."
default: standard
required:
- url
- api_key_id
- api_key
# Documented for reference; the bundled scripts build the headers themselves.
# Standard: x-xdr-auth-id: <id>, Authorization: <api_key>
# Advanced: x-xdr-auth-id: <id>, x-xdr-nonce, x-xdr-timestamp,
# Authorization: sha256(api_key + nonce + timestamp)
auth:
- id: apikey
type: api_key
in: header
name: Authorization
value_template: "{{secret}}"
secret_field: api_key
commands:
# ── Ingestion ─────────────────────────────────────────────────────────────
- id: get_incidents
name: cortex-xdr-get-incidents
description: "List Cortex XDR incidents as a 21-field summary (no hosts, no users, no MITRE, no alerts). Cheap to poll, but for ingestion prefer cortex-xdr-get-incidents-full, which returns the same incidents with their alerts and artifacts. Returns {reply:{incidents:[...]}}."
risk: read
inputs_schema:
properties:
status: { type: string, description: "Filter by status (e.g. new, under_investigation, resolved_threat_handled)" }
created_after: { type: string, description: "Lower bound on creation_time, ISO8601 or epoch ms (incremental fetch watermark)" }
limit: { type: number, description: "Maximum incidents to fetch (default 100)" }
required: []
outputs_schema: { properties: {} }
ingest:
results_path: reply.incidents
dedup_key: incident_id
incremental_field: created_after
- id: get_incidents_full
name: cortex-xdr-get-incidents-full
description: "Fetch incidents WITH their alerts and artifacts (get_multiple_incidents_extra_data) — the ingestion command to prefer. get_incidents answers with a 21-field summary carrying no hosts, no users, no MITRE and none of the alerts; this one returns 39 incident fields, every alert in full (156 fields each) and the file/network artifacts. Records are flattened, so mapping expressions written against get_incidents keep working and alerts[], file_artifacts[], network_artifacts[] sit beside them. Returns {reply:{incidents:[...]}}."
risk: read
inputs_schema:
properties:
status: { type: string, description: "Comma-separated statuses to keep (new, under_investigation, resolved_threat_handled…)" }
created_after: { type: string, description: "Lower bound on creation_time, ISO8601 or epoch ms. Watermarking on this fetches each incident once and never revisits it — alerts joining it later never arrive." }
modified_after: { type: string, description: "Lower bound on modification_time, ISO8601 or epoch ms. The watermark to prefer for ingestion: an incident comes back whenever it changes, and dedup on incident_id turns the second visit into an enrichment." }
limit: { type: number, description: "Maximum incidents to fetch (default 50, paged 50 at a time). A full incident weighs a few KB and up to a few hundred with its alerts, so raise this knowingly." }
exclude_artifacts: { type: boolean, description: "Drop the file and network artifact blocks, keeping the alerts (lighter payload)" }
required: []
outputs_schema: { properties: {} }
ingest:
results_path: reply.incidents
dedup_key: incident_id
incremental_field: modified_after
- id: get_incident_extra_data
name: cortex-xdr-get-incident-extra-data
description: "Get full incident data including its alerts and network artifacts by incident ID."
risk: read
inputs_schema:
properties:
incident_id: { type: string, description: "Incident ID" }
alerts_limit: { type: number, description: "Max alerts to return (default 1000)" }
required: [incident_id]
outputs_schema: { properties: {} }
- id: update_incident
name: cortex-xdr-update-incident
description: "Update an incident's status, severity, assignment and resolve comment (write-back / close the loop)."
inputs_schema:
properties:
incident_id: { type: string, description: "Incident ID to update" }
status: { type: string, description: "New status (new, under_investigation, resolved_threat_handled, resolved_known_issue, resolved_duplicate, resolved_false_positive, resolved_true_positive, resolved_security_testing, resolved_auto)" }
manual_severity: { type: string, description: "Override severity (low, medium, high, critical)" }
assigned_user_mail: { type: string, description: "Assignee email" }
assigned_user_pretty_name: { type: string, description: "Assignee display name" }
unassign: { type: boolean, description: "Clear the assignment when true" }
resolve_comment: { type: string, description: "Resolution comment (shown when resolving)" }
required: [incident_id]
outputs_schema: { properties: {} }
- id: get_alerts
name: cortex-xdr-get-alerts
description: "Fetch Cortex XDR alerts for ingestion (get_alerts_by_filter_data). Returns {reply:{alerts:[...]}}; use reply.alerts as the alert rule results path. Each row is unwrapped out of the API's alert_fields envelope and carries a readable severity_name and status_progress, so alerts-grid field names (internal_id, alert_name, agent_hostname) are what mapping expressions see. Alerts are the detection layer under incidents: ingest them alongside get_incidents when the SOC works detections, not only aggregates."
risk: read
inputs_schema:
properties:
severity: { type: string, description: "Comma-separated severities (informational, low, medium, high, critical)" }
created_after: { type: string, description: "Lower bound on alert source_insert_ts, ISO8601 or epoch ms (incremental fetch watermark)" }
limit: { type: number, description: "Maximum alerts to fetch (default 100). The API serves 100 per call at most; above that the script pages until the limit is reached." }
# Left unfiltered, the call is bounded to the last 30 days: the alerts
# grid is not meant to be asked for a tenant's whole retention.
required: []
outputs_schema: { properties: {} }
ingest:
results_path: reply.alerts
dedup_key: internal_id
incremental_field: created_after
- id: insert_parsed_alerts
name: cortex-xdr-insert-parsed-alerts
description: "Push external alerts (parsed JSON objects) into Cortex XDR for correlation."
inputs_schema:
properties:
alerts: { type: string, description: "JSON array of parsed alert objects (each with product, vendor, severity, alert_name, etc.)" }
required: [alerts]
outputs_schema: { properties: {} }
- id: insert_cef_alerts
name: cortex-xdr-insert-cef-alerts
description: "Push external alerts in CEF format into Cortex XDR for correlation."
inputs_schema:
properties:
alerts: { type: string, description: "CEF alert lines: a JSON array of CEF strings, or newline-separated CEF lines" }
required: [alerts]
outputs_schema: { properties: {} }
# ── Endpoints ─────────────────────────────────────────────────────────────
- id: get_endpoints
name: cortex-xdr-get-endpoints
description: "List/search endpoints by hostname, IP, status, platform, group, etc."
risk: read
inputs_schema:
properties:
hostname: { type: string, description: "Hostname to filter by" }
ip_list: { type: string, description: "Comma-separated IPs" }
status: { type: string, description: "Endpoint status (connected, disconnected, ...)" }
platform: { type: string, description: "OS platform (windows, linux, macos, android)" }
limit: { type: number, description: "Max endpoints (default 30)" }
required: []
outputs_schema: { properties: {} }
- id: isolate_endpoint
name: cortex-xdr-isolate-endpoint
description: "Network-isolate an endpoint by endpoint (agent) ID."
inputs_schema:
properties:
endpoint_id: { type: string, description: "Endpoint (agent) ID to isolate" }
incident_id: { type: string, description: "Optional incident ID to associate the action with" }
required: [endpoint_id]
outputs_schema: { properties: {} }
- id: unisolate_endpoint
name: cortex-xdr-unisolate-endpoint
description: "Remove network isolation from an endpoint by endpoint (agent) ID."
inputs_schema:
properties:
endpoint_id: { type: string, description: "Endpoint (agent) ID to unisolate" }
incident_id: { type: string, description: "Optional incident ID to associate the action with" }
required: [endpoint_id]
outputs_schema: { properties: {} }
- id: scan_endpoints
name: cortex-xdr-scan-endpoints
description: "Trigger a malware scan on endpoints matching the given filters (or all)."
inputs_schema:
properties:
endpoint_id_list: { type: string, description: "Comma-separated endpoint IDs (omit + use all=true to scan all)" }
hostname: { type: string, description: "Comma-separated hostnames" }
all: { type: boolean, description: "Scan all endpoints when true and no other filter is set" }
incident_id: { type: string, description: "Optional incident ID" }
required: []
outputs_schema: { properties: {} }
- id: get_policy
name: cortex-xdr-get-policy
description: "Get the policy name applied to an endpoint."
risk: read
inputs_schema:
properties:
endpoint_id: { type: string, description: "Endpoint (agent) ID" }
required: [endpoint_id]
outputs_schema: { properties: {} }
# ── Hash block / allow lists ──────────────────────────────────────────────
- id: blocklist_files
name: cortex-xdr-blocklist-files
description: "Add file hashes to the block list."
inputs_schema:
properties:
hash_list: { type: string, description: "Comma-separated SHA-256 hashes to block" }
comment: { type: string, description: "Optional comment" }
incident_id: { type: string, description: "Optional incident ID" }
required: [hash_list]
outputs_schema: { properties: {} }
- id: remove_blocklist_files
name: cortex-xdr-remove-blocklist-files
description: "Remove file hashes from the block list."
inputs_schema:
properties:
hash_list: { type: string, description: "Comma-separated SHA-256 hashes to remove" }
comment: { type: string, description: "Optional comment" }
incident_id: { type: string, description: "Optional incident ID" }
required: [hash_list]
outputs_schema: { properties: {} }
- id: allowlist_files
name: cortex-xdr-allowlist-files
description: "Add file hashes to the allow list."
inputs_schema:
properties:
hash_list: { type: string, description: "Comma-separated SHA-256 hashes to allow" }
comment: { type: string, description: "Optional comment" }
incident_id: { type: string, description: "Optional incident ID" }
required: [hash_list]
outputs_schema: { properties: {} }
- id: remove_allowlist_files
name: cortex-xdr-remove-allowlist-files
description: "Remove file hashes from the allow list."
inputs_schema:
properties:
hash_list: { type: string, description: "Comma-separated SHA-256 hashes to remove" }
comment: { type: string, description: "Optional comment" }
incident_id: { type: string, description: "Optional incident ID" }
required: [hash_list]
outputs_schema: { properties: {} }
# ── File quarantine / restore ─────────────────────────────────────────────
- id: quarantine_files
name: cortex-xdr-quarantine-files
description: "Quarantine a file by path + hash on the given endpoints."
inputs_schema:
properties:
endpoint_id_list: { type: string, description: "Comma-separated endpoint IDs" }
file_path: { type: string, description: "Full path of the file to quarantine" }
file_hash: { type: string, description: "SHA-256 of the file" }
incident_id: { type: string, description: "Optional incident ID" }
required: [endpoint_id_list, file_path, file_hash]
outputs_schema: { properties: {} }
- id: restore_file
name: cortex-xdr-restore-file
description: "Restore a quarantined file by hash."
inputs_schema:
properties:
file_hash: { type: string, description: "SHA-256 of the file to restore" }
endpoint_id: { type: string, description: "Optional endpoint ID" }
incident_id: { type: string, description: "Optional incident ID" }
required: [file_hash]
outputs_schema: { properties: {} }
- id: get_quarantine_status
name: cortex-xdr-get-quarantine-status
description: "Check whether a file is quarantined on an endpoint."
risk: read
inputs_schema:
properties:
endpoint_id: { type: string, description: "Endpoint ID" }
file_path: { type: string, description: "File path" }
file_hash: { type: string, description: "SHA-256 of the file" }
required: [endpoint_id, file_path, file_hash]
outputs_schema: { properties: {} }
# ── Real-time scripts ─────────────────────────────────────────────────────
- id: run_script
name: cortex-xdr-run-script
description: "Run a script (by UID) on endpoints with optional parameters."
inputs_schema:
properties:
script_uid: { type: string, description: "Script UID" }
endpoint_ids: { type: string, description: "Comma-separated endpoint IDs" }
parameters: { type: string, description: "JSON object of parameter values" }
timeout: { type: number, description: "Timeout in seconds (default 600)" }
incident_id: { type: string, description: "Optional incident ID" }
required: [script_uid, endpoint_ids]
outputs_schema: { properties: {} }
- id: get_script_execution_results
name: cortex-xdr-get-script-execution-results
description: "Get the results of a script execution by action ID."
risk: read
inputs_schema:
properties:
action_id: { type: string, description: "Action ID returned by run_script" }
required: [action_id]
outputs_schema: { properties: {} }
- id: get_scripts
name: cortex-xdr-get-scripts
description: "List available scripts, optionally filtered by name/description/OS support."
risk: read
inputs_schema:
properties:
name: { type: string, description: "Comma-separated script names" }
windows_supported: { type: boolean, description: "Filter scripts supporting Windows" }
required: []
outputs_schema: { properties: {} }
# ── Actions / misc ────────────────────────────────────────────────────────
- id: action_status
name: cortex-xdr-action-status
description: "Get the status of a group action by action ID."
risk: read
inputs_schema:
properties:
action_id: { type: string, description: "Group action ID" }
required: [action_id]
outputs_schema: { properties: {} }
- id: get_distribution_versions
name: cortex-xdr-get-distribution-versions
description: "List available agent installer versions."
risk: read
inputs_schema:
properties: {}
required: []
outputs_schema: { properties: {} }
- id: delete_endpoints
name: cortex-xdr-delete-endpoints
description: "Delete endpoints (agents) by ID."
inputs_schema:
properties:
endpoint_ids: { type: string, description: "Comma-separated endpoint IDs to delete" }
required: [endpoint_ids]
outputs_schema: { properties: {} }
- id: set_endpoint_alias
name: cortex-xdr-set-endpoint-alias
description: "Set the alias name on endpoints."
inputs_schema:
properties:
endpoint_ids: { type: string, description: "Comma-separated endpoint IDs" }
alias: { type: string, description: "New alias name (empty to clear)" }
required: [endpoint_ids]
outputs_schema: { properties: {} }
- id: abort_scan
name: cortex-xdr-abort-scan
description: "Abort a running malware scan on endpoints matching the filters (or all)."
inputs_schema:
properties:
endpoint_id_list: { type: string, description: "Comma-separated endpoint IDs (omit to abort all)" }
incident_id: { type: string, description: "Optional incident ID" }
required: []
outputs_schema: { properties: {} }
- id: get_original_alerts
name: cortex-xdr-get-original-alerts
description: "Get the original raw alert events by alert ID."
risk: read
inputs_schema:
properties:
alert_id_list: { type: string, description: "Comma-separated alert IDs" }
required: [alert_id_list]
outputs_schema: { properties: {} }
- id: get_script_metadata
name: cortex-xdr-get-script-metadata
description: "Get metadata for a script by UID."
risk: read
inputs_schema:
properties:
script_uid: { type: string, description: "Script UID" }
required: [script_uid]
outputs_schema: { properties: {} }
- id: get_script_code
name: cortex-xdr-get-script-code
description: "Get the source code of a script by UID."
risk: read
inputs_schema:
properties:
script_uid: { type: string, description: "Script UID" }
required: [script_uid]
outputs_schema: { properties: {} }
- id: run_snippet_code_script
name: cortex-xdr-run-snippet-code-script
description: "Run an arbitrary code snippet on endpoints."
inputs_schema:
properties:
snippet_code: { type: string, description: "Code snippet to run" }
endpoint_ids: { type: string, description: "Comma-separated endpoint IDs" }
incident_id: { type: string, description: "Optional incident ID" }
required: [snippet_code, endpoint_ids]
outputs_schema: { properties: {} }
- id: get_script_execution_status
name: cortex-xdr-get-script-execution-status
description: "Get the status of a script execution by action ID."
risk: read
inputs_schema:
properties:
action_id: { type: string, description: "Action ID" }
required: [action_id]
outputs_schema: { properties: {} }
- id: retrieve_file
name: cortex-xdr-retrieve-file
description: "Retrieve files from endpoints by OS-specific path lists."
inputs_schema:
properties:
endpoint_ids: { type: string, description: "Comma-separated endpoint IDs" }
windows: { type: string, description: "Comma-separated Windows file paths" }
linux: { type: string, description: "Comma-separated Linux file paths" }
macos: { type: string, description: "Comma-separated macOS file paths" }
incident_id: { type: string, description: "Optional incident ID" }
required: [endpoint_ids]
outputs_schema: { properties: {} }
- id: retrieve_file_details
name: cortex-xdr-retrieve-file-details
description: "Get the download details of a file-retrieval action."
risk: read
inputs_schema:
properties:
action_id: { type: string, description: "Group action ID from retrieve_file" }
required: [action_id]
outputs_schema: { properties: {} }
- id: add_exclusion
name: cortex-xdr-add-exclusion
description: "Add an alert exclusion."
inputs_schema:
properties:
name: { type: string, description: "Exclusion name" }
indicator: { type: string, description: "JSON indicator object for the exclusion filter" }
status: { type: string, description: "ENABLED or DISABLED (default ENABLED)" }
required: [name, indicator]
outputs_schema: { properties: {} }
- id: delete_exclusion
name: cortex-xdr-delete-exclusion
description: "Delete an alert exclusion by ID."
inputs_schema:
properties:
alert_exclusion_id: { type: number, description: "Exclusion ID" }
required: [alert_exclusion_id]
outputs_schema: { properties: {} }
- id: get_exclusion
name: cortex-xdr-get-exclusion
description: "List alert exclusions."
risk: read
inputs_schema:
properties:
tenant_id: { type: string, description: "Optional tenant ID" }
required: []
outputs_schema: { properties: {} }
- id: add_tag_endpoint
name: cortex-xdr-add-tag-endpoint
description: "Add a tag to endpoints."
inputs_schema:
properties:
endpoint_ids: { type: string, description: "Comma-separated endpoint IDs" }
tag: { type: string, description: "Tag to add" }
required: [endpoint_ids, tag]
outputs_schema: { properties: {} }
- id: remove_tag_endpoint
name: cortex-xdr-remove-tag-endpoint
description: "Remove a tag from endpoints."
inputs_schema:
properties:
endpoint_ids: { type: string, description: "Comma-separated endpoint IDs" }
tag: { type: string, description: "Tag to remove" }
required: [endpoint_ids, tag]
outputs_schema: { properties: {} }
- id: get_device_control_violations
name: cortex-xdr-get-device-control-violations
description: "List device control (USB) violations."
risk: read
inputs_schema:
properties:
endpoint_ids: { type: string, description: "Comma-separated endpoint IDs" }
type: { type: string, description: "Comma-separated violation types" }
timestamp_gte: { type: string, description: "Lower bound timestamp (ISO8601 or epoch ms)" }
required: []
outputs_schema: { properties: {} }
- id: list_users
name: cortex-xdr-list-users
description: "List Cortex XDR users."
risk: read
inputs_schema:
properties: {}
required: []
outputs_schema: { properties: {} }
- id: get_risk_score
name: cortex-xdr-get-risk-score
description: "Get the risk score of a user or host by ID."
risk: read
inputs_schema:
properties:
id: { type: string, description: "User or host identifier" }
required: [id]
outputs_schema: { properties: {} }
- id: list_risky_users
name: cortex-xdr-list-risky-users
description: "List risky users."
risk: read
inputs_schema:
properties: {}
required: []
outputs_schema: { properties: {} }
- id: list_risky_hosts
name: cortex-xdr-list-risky-hosts
description: "List risky hosts."
risk: read
inputs_schema:
properties: {}
required: []
outputs_schema: { properties: {} }
- id: list_user_groups
name: cortex-xdr-list-user-groups
description: "Get user groups by name."
risk: read
inputs_schema:
properties:
group_names: { type: string, description: "Comma-separated group names" }
required: []
outputs_schema: { properties: {} }
- id: list_roles
name: cortex-xdr-list-roles
description: "Get roles by name."
risk: read
inputs_schema:
properties:
role_names: { type: string, description: "Comma-separated role names" }
required: []
outputs_schema: { properties: {} }
- id: set_user_role
name: cortex-xdr-set-user-role
description: "Assign a role to users."
inputs_schema:
properties:
user_emails: { type: string, description: "Comma-separated user emails" }
role_name: { type: string, description: "Role name to assign" }
required: [user_emails, role_name]
outputs_schema: { properties: {} }
- id: remove_user_role
name: cortex-xdr-remove-user-role
description: "Remove the role assignment from users."
inputs_schema:
properties:
user_emails: { type: string, description: "Comma-separated user emails" }
required: [user_emails]
outputs_schema: { properties: {} }
- id: audit_management_logs
name: cortex-xdr-audit-management-logs
description: "Retrieve management audit logs."
risk: read
inputs_schema:
properties:
email: { type: string, description: "Comma-separated emails" }
type: { type: string, description: "Comma-separated log types" }
timestamp_gte: { type: string, description: "Lower bound timestamp (ISO8601 or epoch ms)" }
limit: { type: number, description: "Max records (default 100)" }
required: []
outputs_schema: { properties: {} }
- id: get_audit_agent_reports
name: cortex-xdr-get-audit-agent-reports
description: "Retrieve agent audit reports."
risk: read
inputs_schema:
properties:
endpoint_ids: { type: string, description: "Comma-separated endpoint IDs" }
type: { type: string, description: "Comma-separated report types" }
timestamp_gte: { type: string, description: "Lower bound timestamp (ISO8601 or epoch ms)" }
limit: { type: number, description: "Max records (default 100)" }
required: []
outputs_schema: { properties: {} }
- id: get_distribution_url
name: cortex-xdr-get-distribution-url
description: "Get the download URL of an agent installer distribution."
risk: read
inputs_schema:
properties:
distribution_id: { type: string, description: "Distribution ID" }
package_type: { type: string, description: "Package type (sh, rpm, deb, pkg, x86, x64, ...)" }
required: [distribution_id, package_type]
outputs_schema: { properties: {} }
- id: get_distribution_status
name: cortex-xdr-get-distribution-status
description: "Get the build status of an agent installer distribution."
risk: read
inputs_schema:
properties:
distribution_id: { type: string, description: "Distribution ID" }
required: [distribution_id]
outputs_schema: { properties: {} }
- id: create_distribution
name: cortex-xdr-create-distribution
description: "Create an agent installer distribution."
inputs_schema:
properties:
name: { type: string, description: "Distribution name" }
platform: { type: string, description: "Platform (windows, linux, macos, android)" }
package_type: { type: string, description: "standalone or upgrade (default standalone)" }
agent_version: { type: string, description: "Agent version" }
description: { type: string, description: "Optional description" }
required: [name, platform]
outputs_schema: { properties: {} }
- id: test_connection
name: cortex-xdr-test-connection
description: "Verify connectivity and credentials (used by the Test button)."
risk: read
inputs_schema:
properties: {}
required: []
outputs_schema: { properties: {} }
ingestion:
command: get_incidents
mapper: get_incidents
default_incident_type: "Cortex XDR Incident"