Authenticate credentials ↗
Configure credentials before running Cortex CLI. The installer does not save them.
Choose the method that fits your workflow:
- Use a configuration file for persistent local authentication.
- Use environment variables for CI/CD pipelines.
- Use command-line flags for one-off commands or overrides.
Generate API keys in the UI, or use the self-service workflow to create role-restricted CLI and IDE keys through the Public API. The self-service workflow uses a Primary API key. See Self-service API keys for CLI scans.
Do not commit API keys or credential files to source control.
Configuration file
Use a cortex.env file for persistent local authentication. Cortex CLI reads this file automatically from your home or current working directory.
The file uses KEY=VALUE pairs.
macOS and Linux
Create ~/cortex.env and restrict access to it.
cat > ~/cortex.env << EOF CORTEX_API_BASE_URL=https://api-<TENANT>.xdr.us.paloaltonetworks.com CORTEX_API_KEY=<YOUR_API_KEY> CORTEX_API_KEY_ID=<YOUR_KEY_ID> EOF chmod 600 ~/cortex.env
Windows
Create cortex.env in your user profile.
$configPath = "$env:USERPROFILE\cortex.env" @" CORTEX_API_BASE_URL=https://api-<TENANT>.xdr.us.paloaltonetworks.com CORTEX_API_KEY=<YOUR_API_KEY> CORTEX_API_KEY_ID=<YOUR_KEY_ID> "@ | Out-File -FilePath $configPath -Encoding UTF8
Environment variables
Use environment variables for CI/CD pipelines. Store values in your CI/CD platform's secret store.
| Variable name | Description |
|---|---|
CORTEX_API_BASE_URL |
Your tenant URL (such as https://api-example.xdr.us.paloaltonetworks.com) |
CORTEX_API_KEY |
The secret key token |
CORTEX_API_KEY_ID |
The ID associated with the key |
macOS and Linux
export CORTEX_API_BASE_URL="https://api-<TENANT>.xdr.us.paloaltonetworks.com" export CORTEX_API_KEY="<YOUR_API_KEY>" export CORTEX_API_KEY_ID="<YOUR_KEY_ID>"
Windows
$env:CORTEX_API_BASE_URL="https://api-<TENANT>.xdr.us.paloaltonetworks.com" $env:CORTEX_API_KEY="<YOUR_API_KEY>" $env:CORTEX_API_KEY_ID="<YOUR_KEY_ID>"
Command-line flags
Use flags for one-off scans or to override configured credentials. Place global flags before the module name.
cortexcli --api-base-url <URL> --api-key <KEY> --api-key-id <ID> code scan ...