Brokers
Manage the inventory of registered Broker VMs — list, edit, register new ones, remove, reboot, shutdown, upgrade. Endpoints in this tag operate on the broker as a whole, not on individual applets.
Return all brokers registered with the tenant, optionally filtered by one or more device_id and/or device_name values supplied in the request body.
The response is a JSON array of broker records, each carrying the broker identity (device_id, name, FQDN, version), connectivity and configuration status, resource usage (CPU, memory, disk), network configuration (interfaces, subnet, proxy, NTP), policy (auto-upgrade window, SSH access, SSL/CA certificates), and the list of currently configured applets with their per-applet status and metrics.
No pagination today — the full list is returned in a single response. Filters are applied server-side: device_id by exact match, and device_name by shell-style wildcard (fnmatch, case-insensitive when a */? wildcard is present) falling back to exact match for values without wildcards.
Filtered no-match returns null — when a filter is supplied but no broker matches, the 200 body is JSON null (not []). An unfiltered request always returns a JSON array.
Required permission: broker_action.
The tenant API key value, sent as the literal Authorization
header value (no Bearer prefix).
The tenant API key identifier corresponding to the value sent in
Authorization.
Optional filters for getBrokers. Omit
the body entirely to return every broker.
Exact-match filter on device_id.
Filter on device_name. A value containing shell-style
wildcards (*, ?) is matched with fnmatch
(case-insensitive); a value without wildcards is matched
exactly (case-sensitive). Multiple values are OR-combined.
Brokers matching the request. An unfiltered request returns a
JSON array (possibly empty). A filtered request that matches
nothing returns JSON null — hence the schema is nullable.
Full inventory record for a single registered broker.
Unique identifier of the broker within the tenant.
Operator-supplied display name.
Connectivity / lifecycle status of the broker (e.g.,
CONNECTED, DISCONNECTED, transitory states such as
IMPORT_CONFIG).
Broker VM platform version (e.g., 10.2.0).
IP address of the broker's externally-facing interface.
IP addresses of every configured interface.
Cluster the broker belongs to, or null if standalone.
Whether the broker's persisted configuration matches its
applied configuration (e.g., Configured, Misconfigured).
Recent CPU usage as a percentage (0–100), or null if unavailable.
Recent memory usage as a percentage (0–100), or null if unavailable.
Recent disk usage as a percentage (0–100), or null if unavailable.
ISO 8601 UTC timestamp of the broker's last sync.
2026-05-17T09:55:11+00:00ISO 8601 UTC timestamp of the broker's last upgrade.
Broker's fully qualified domain name.
Port the broker web UI listens on, or null.
Configured NTP servers.
Broker internal subnet CIDR.
Whether monitoring metric collection is enabled.
Request validation failed. errors is present when the failure
originates from Pydantic schema validation; otherwise only
description is populated.
Missing or invalid Authorization / x-xdr-auth-id credentials.
Authenticated caller lacks the broker_action permission, or the
targeted broker is a cluster member and the operation is rejected
at that level.
Unexpected server-side failure.
GET /public_api/v1/brokers/ HTTP/1.1
Host: api-cortex.paloaltonetworks.com
Authorization: YOUR_API_KEY
x-xdr-auth-id: YOUR_API_KEY
Content-Type: application/json
Accept: */*
Content-Length: 2
{}[
{
"device_id": "6f3a8c7e-1a9b-4c0d-9e21-7f5d3b1c8a02",
"device_name": "broker-eu-01",
"status": "CONNECTED",
"version": "10.2.0",
"external_interface": "10.0.0.42",
"all_interfaces": [
"10.0.0.42"
],
"cluster_name": null,
"configuration_status": "Configured",
"cpu_usage": 7.3,
"memory_usage": 41.2,
"disk_usage": 23,
"last_seen": "2026-05-17T09:55:11+00:00",
"upgrade_time": "2026-04-30T22:10:00+00:00",
"fqdn": "broker-eu-01.example.com",
"proxy_server": null,
"web_ui_listening_port": "443",
"ntp_servers": [
"pool.ntp.org"
],
"internal_network_subnet": "172.16.0.0/24",
"auto_upgrade": {
"enabled": true,
"days_in_week": [
"Saturday",
"Sunday"
],
"schedule": "specific",
"schedule_from": "22:00",
"schedule_to": "02:00",
"timezone": "UTC"
},
"monitoring": true,
"ssh_access": {
"type": "enabled",
"welcome_message": "Authorized access only.",
"ssh_public_keys": [
"ssh-ed25519 AAAA... ops@example.com"
]
},
"ssl_server_certificates": null,
"trusted_ca_certificate": null,
"apps": [
{
"name": "WEC",
"status": "Connected"
}
]
}
]Apply configuration changes to a single broker. Any field omitted from the request body is left unchanged. The endpoint returns an action_id for the asynchronous propagation of the change to the broker; poll getActionStatus to observe completion.
Required permission: broker_action.
Mutually-exclusive concerns
ssh_keysentries must start with one ofssh-rsa,ssh-ed25519,ssh-dss,ecdsa-sha2-— otherwise400.webui_portmust be an integer in[1, 65535].internal_networkmust be a valid CIDR.When
auto_upgrade=trueandupgrade_windowis provided withstart_timeandend_time, the window must be at least 4 hours long.
Notable error mappings
404 Not Found—device_idis unknown.409 Conflict— broker is currently disconnected.403 Forbidden— broker is a cluster member (edit the cluster configuration instead).
The tenant API key value, sent as the literal Authorization
header value (no Bearer prefix).
The tenant API key identifier corresponding to the value sent in
Authorization.
The broker device identifier as returned by getBrokers.
6f3a8c7e-1a9b-4c0d-9e21-7f5d3b1c8a02Patch for a single broker. Any field omitted from the body is left unchanged. Server-side validation rules are described per-field below.
New display name for the broker.
New fully qualified domain name.
Port the broker's web UI listens on. Must parse as an integer
in [1, 65535].
443List of NTP server hostnames or IPs.
Internal network CIDR. Must parse as an IPv4 network.
172.16.0.0/24Master switch for auto-upgrade. When true, upgrade_window
should also be provided.
Whether the broker reports monitoring metrics.
Whether SSH access to the broker is enabled.
Authorized SSH public keys. Each entry must start with one of
ssh-rsa, ssh-ed25519, ssh-dss, ecdsa-sha2-.
SSH login banner.
PEM-encoded server certificate (paired with ssl_key).
PEM-encoded private key (paired with ssl_crt).
Display name for the SSL certificate file.
Display name for the SSL key file.
New broker web-UI admin password (write-only; never returned
by getBrokers).
Edit accepted; poll action_id for propagation status.
Acknowledgement of an accepted edit.
Opaque identifier of the asynchronous action; poll
getActionStatus.
act_2c8d6b9e1aRequest validation failed. errors is present when the failure
originates from Pydantic schema validation; otherwise only
description is populated.
Missing or invalid Authorization / x-xdr-auth-id credentials.
Authenticated caller lacks the broker_action permission, or the
targeted broker is a cluster member and the operation is rejected
at that level.
The targeted resource does not exist.
The action cannot proceed in the current state — most commonly, the broker is disconnected, or an applet is not in the required active/inactive state.
Unexpected server-side failure.
POST /public_api/v1/brokers/{device_id}/ HTTP/1.1
Host: api-cortex.paloaltonetworks.com
Authorization: YOUR_API_KEY
x-xdr-auth-id: YOUR_API_KEY
Content-Type: application/json
Accept: */*
Content-Length: 28
{
"name": "broker-eu-01-prod"
}{
"action_id": "act_2c8d6b9e1a"
}Permanently de-register a broker. The broker is not uninstalled from its host; it is simply removed from the tenant's inventory and will be ignored by subsequent syncs.
Required permission: broker_action.
404 Not Found—device_idis unknown.403 Forbidden— broker is a cluster member; remove it from the cluster first.
The tenant API key value, sent as the literal Authorization
header value (no Bearer prefix).
The tenant API key identifier corresponding to the value sent in
Authorization.
The broker device identifier as returned by getBrokers.
6f3a8c7e-1a9b-4c0d-9e21-7f5d3b1c8a02Broker removed.
Empty object on success.
Missing or invalid Authorization / x-xdr-auth-id credentials.
Authenticated caller lacks the broker_action permission, or the
targeted broker is a cluster member and the operation is rejected
at that level.
The targeted resource does not exist.
Unexpected server-side failure.
POST /public_api/v1/brokers/{device_id}/delete/ HTTP/1.1
Host: api-cortex.paloaltonetworks.com
Authorization: YOUR_API_KEY
x-xdr-auth-id: YOUR_API_KEY
Accept: */*
{}Issue a short-lived registration token to be used by a new Broker VM during its first-time activation. The token is opaque to the caller; pass it verbatim to the appliance's direct API /public_api/v1/register endpoint (see broker-direct-papi.yaml).
Not idempotent — each call produces a new token.
Required permission: broker_action.
The tenant API key value, sent as the literal Authorization
header value (no Bearer prefix).
The tenant API key identifier corresponding to the value sent in
Authorization.
Token issued.
Payload returned by generateRegistrationToken. The token is opaque to the caller; pass it verbatim to the broker's direct API /public_api/v1/register endpoint.
Opaque registration token. Pass verbatim to the appliance's
direct API /public_api/v1/register endpoint.
Missing or invalid Authorization / x-xdr-auth-id credentials.
Authenticated caller lacks the broker_action permission, or the
targeted broker is a cluster member and the operation is rejected
at that level.
Unexpected server-side failure.
POST /public_api/v1/brokers/registration_token/ HTTP/1.1
Host: api-cortex.paloaltonetworks.com
Authorization: YOUR_API_KEY
x-xdr-auth-id: YOUR_API_KEY
Accept: */*
{
"token": "<registration-token-opaque-32-char-string>"
}Request an asynchronous reboot of the broker's underlying operating system. The endpoint returns immediately once the action is enqueued; observe completion by inspecting the broker's status through getBrokers — status will cycle through reconnect states.
Required permission: broker_action.
404 Not Found—device_idis unknown.409 Conflict— broker is disconnected and cannot receive the action.
The returned action_id can also be polled via getActionStatus.
The tenant API key value, sent as the literal Authorization
header value (no Bearer prefix).
The tenant API key identifier corresponding to the value sent in
Authorization.
The broker device identifier as returned by getBrokers.
6f3a8c7e-1a9b-4c0d-9e21-7f5d3b1c8a02Reboot accepted; poll action_id for completion status.
Acknowledgement of an accepted lifecycle action (reboot, shutdown, or upgrade).
Opaque identifier of the asynchronous lifecycle action; poll
getActionStatus.
act_2c8d6b9e1aMissing or invalid Authorization / x-xdr-auth-id credentials.
Authenticated caller lacks the broker_action permission, or the
targeted broker is a cluster member and the operation is rejected
at that level.
The targeted resource does not exist.
The action cannot proceed in the current state — most commonly, the broker is disconnected, or an applet is not in the required active/inactive state.
Unexpected server-side failure.
POST /public_api/v1/brokers/{device_id}/reboot/ HTTP/1.1
Host: api-cortex.paloaltonetworks.com
Authorization: YOUR_API_KEY
x-xdr-auth-id: YOUR_API_KEY
Accept: */*
{
"action_id": "act_2c8d6b9e1a"
}Request an asynchronous shutdown of the broker. The broker becomes DISCONNECTED once the OS powers down and will require manual intervention (or hypervisor automation) to come back online.
Required permission: broker_action.
404 Not Found—device_idis unknown.409 Conflict— broker is already disconnected.
The returned action_id can also be polled via getActionStatus.
The tenant API key value, sent as the literal Authorization
header value (no Bearer prefix).
The tenant API key identifier corresponding to the value sent in
Authorization.
The broker device identifier as returned by getBrokers.
6f3a8c7e-1a9b-4c0d-9e21-7f5d3b1c8a02Shutdown accepted; poll action_id for completion status.
Acknowledgement of an accepted lifecycle action (reboot, shutdown, or upgrade).
Opaque identifier of the asynchronous lifecycle action; poll
getActionStatus.
act_2c8d6b9e1aMissing or invalid Authorization / x-xdr-auth-id credentials.
Authenticated caller lacks the broker_action permission, or the
targeted broker is a cluster member and the operation is rejected
at that level.
The targeted resource does not exist.
The action cannot proceed in the current state — most commonly, the broker is disconnected, or an applet is not in the required active/inactive state.
Unexpected server-side failure.
POST /public_api/v1/brokers/{device_id}/shutdown/ HTTP/1.1
Host: api-cortex.paloaltonetworks.com
Authorization: YOUR_API_KEY
x-xdr-auth-id: YOUR_API_KEY
Accept: */*
{
"action_id": "act_2c8d6b9e1a"
}Trigger an asynchronous upgrade of the broker to the most recent version available for its OS family. The broker will reboot one or more times during the upgrade; observe progress via getBrokers.
Required permission: broker_action.
404 Not Found—device_idis unknown.409 Conflict— broker is disconnected.
The returned action_id can also be polled via getActionStatus.
The tenant API key value, sent as the literal Authorization
header value (no Bearer prefix).
The tenant API key identifier corresponding to the value sent in
Authorization.
The broker device identifier as returned by getBrokers.
6f3a8c7e-1a9b-4c0d-9e21-7f5d3b1c8a02Upgrade accepted; poll action_id for completion status.
Acknowledgement of an accepted lifecycle action (reboot, shutdown, or upgrade).
Opaque identifier of the asynchronous lifecycle action; poll
getActionStatus.
act_2c8d6b9e1aMissing or invalid Authorization / x-xdr-auth-id credentials.
Authenticated caller lacks the broker_action permission, or the
targeted broker is a cluster member and the operation is rejected
at that level.
The targeted resource does not exist.
The action cannot proceed in the current state — most commonly, the broker is disconnected, or an applet is not in the required active/inactive state.
Unexpected server-side failure.
POST /public_api/v1/brokers/{device_id}/upgrade/ HTTP/1.1
Host: api-cortex.paloaltonetworks.com
Authorization: YOUR_API_KEY
x-xdr-auth-id: YOUR_API_KEY
Accept: */*
{
"action_id": "act_2c8d6b9e1a"
}Last updated
Was this helpful?
