> For the complete documentation index, see [llms.txt](https://cortex-docs.paloaltonetworks.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://cortex-docs.paloaltonetworks.com/cortex-cloud-api/cloud-consumption-dashboard/licensing.md).

# Licensing

Tenant license and entitlement information.

## Tenant license & entitlement info

> Returns the tenant's license and add-on entitlement information — purchased quotas, current usage/installed counts, expiration dates, add-on states, and (for Cloud / Cloud Posture licenses) a per-workload usage breakdown.\
> \
> Backed by the existing licensing service: it reuses \`LicensingCalculatorService.get\_license\_status()\` and projects the result through \`TenantLicenseInfo.to\_dict()\`. The response \*\*shape is tenant-type dependent\*\* — XSIAM, XDR, XSOAR and Xpanse tenants each return a different set of fields. The endpoint takes no parameters; send an empty body.\
> \
> Note: the workload breakdown exposed here is filtered to \`name\` + \`usage\` only — it does \*\*not\*\* include billable-workload conversion, utilization percentage, over-quota flags, or tooltip breakdowns. For the Cloud Consumption dashboard license cards (with billable units and tooltips) use the \`/platform/cloud-consumption/v1/license-runtime/\` and \`/platform/cloud-consumption/v1/license-posture/\` endpoints instead.

```json
{"openapi":"3.0.3","info":{"title":"Cortex Platform Cloud Consumption Dashboard REST APIs","version":"1.0.0"},"tags":[{"name":"Licensing","description":"Tenant license and entitlement information."}],"servers":[{"url":"https://api-{{fqdn}}","description":"Production API server"}],"security":[{"bearerAuth":[]}],"components":{"securitySchemes":{"bearerAuth":{"type":"http","scheme":"bearer","bearerFormat":"JWT","description":"JWT token for API authentication"}},"schemas":{"EmptyRequest":{"type":"object","description":"Endpoints in the **License** group take no parameters in v1. Send an empty body (or omit the body entirely).","additionalProperties":false},"TenantLicenseInfoResponse":{"type":"object","description":"Public-API envelope for `get_tenant_info`. The `reply` object shape is **tenant-type dependent**: XSIAM tenants get `XsiamTenantLicenseInfo`, XDR tenants get `XdrTenantLicenseInfo`, XSOAR tenants get `XsoarTenantLicenseInfo`, and Xpanse tenants get `XpanseTenantLicenseInfo`. The server selects the variant based on the authenticated tenant.","required":["reply"],"additionalProperties":false,"properties":{"reply":{"oneOf":[{"$ref":"#/components/schemas/XsiamTenantLicenseInfo"},{"$ref":"#/components/schemas/XdrTenantLicenseInfo"},{"$ref":"#/components/schemas/XsoarTenantLicenseInfo"},{"$ref":"#/components/schemas/XpanseTenantLicenseInfo"}]}}},"XsiamTenantLicenseInfo":{"type":"object","description":"License info returned for XSIAM tenants. All fields are optional — only entitlements present on the tenant are emitted.","properties":{"xsiam_enterprise_plus_expiration":{"type":"string","description":"Expiration date (UI-formatted) or `0` if not set."},"purchased_xsiam_enterprise_plus":{"$ref":"#/components/schemas/PurchasedXsiamEnterprisePlus"},"pro_per_endpoint_expiration":{"type":"integer"},"purchased_pro_per_endpoint":{"type":"integer"},"data_enabled_pro_per_endpoint":{"type":"integer"},"prevent_expiration":{"type":"integer"},"purchased_prevent":{"type":"integer"},"installed_prevent":{"type":"integer"},"identity_threat_expiration":{"type":"integer"},"host_insights_expiration":{"type":"integer"},"enabled_host_insights":{"type":"integer"},"attack_surface_management_expiration":{"type":"string"},"threat_intelligence_management_expiration":{"type":"string"},"xth_expiration":{"type":"integer"}}},"PurchasedXsiamEnterprisePlus":{"type":"object","description":"Purchased XSIAM Enterprise Plus entitlement.","properties":{"users":{"type":"integer"},"gb":{"type":"integer"},"agents":{"type":"integer"}}},"XdrTenantLicenseInfo":{"type":"object","description":"License info returned for XDR tenants. For Cloud / Cloud Posture licenses a `*_breakdown` array of per-workload usage may be included.","properties":{"pro_per_endpoint_expiration":{"type":"string"},"purchased_pro_per_endpoint":{"$ref":"#/components/schemas/PurchasedAgents"},"data_enabled_pro_per_endpoint":{"type":"integer"},"pro_gb_expiration":{"type":"string"},"purchased_pro_gb":{"$ref":"#/components/schemas/PurchasedGb"},"purchased_pro_cloud":{"$ref":"#/components/schemas/PurchasedAgents"},"installed_pro_cloud":{"type":"integer"},"installed_pro_cloud_breakdown":{"type":"array","items":{"$ref":"#/components/schemas/WorkloadBreakdownItem"}},"purchased_cloud_posture":{"type":"integer"},"installed_cloud_posture":{"type":"integer"},"installed_cloud_posture_breakdown":{"type":"array","items":{"$ref":"#/components/schemas/WorkloadBreakdownItem"}},"identity_threat_expiration":{"type":"integer"},"compute_unit_expiration":{"type":"integer"},"purchased_compute_unit":{"type":"integer"},"host_insights_expiration":{"type":"integer"},"forensics_expiration":{"type":"integer"}}},"PurchasedAgents":{"type":"object","description":"Purchased entitlement keyed by agent count.","properties":{"agents":{"type":"integer"}}},"PurchasedGb":{"type":"object","description":"Purchased entitlement keyed by storage in GB.","properties":{"gb":{"type":"integer"}}},"WorkloadBreakdownItem":{"type":"object","description":"A single per-workload usage line for Cloud / Cloud Posture licenses. Filtered to `name` + `usage` only (see `LicenseConsts.ALLOWED_KEYS_BREAKDOWN_PAPI`).","properties":{"name":{"type":"string"},"usage":{"type":"number"}}},"XsoarTenantLicenseInfo":{"type":"object","description":"License info returned for XSOAR tenants.","properties":{"is_tim_license":{"type":"boolean"},"is_soar_license":{"type":"boolean"},"tim_expiration":{"type":"string"},"soar_expiration":{"type":"string"},"total_users":{"type":"integer"},"used_users":{"type":"integer"}}},"XpanseTenantLicenseInfo":{"type":"object","description":"License info returned for Xpanse (Expander) tenants.","properties":{"aum":{"type":"integer","description":"Assets Under Management."},"expiration_date":{"type":"string"},"activation_date":{"type":"string"},"status":{"type":"string"}}},"BadRequestError":{"type":"object","description":"Bad-request error envelope, matching the 4xx (400) error body used by `/platform/iam/v1/` (e.g. `RoleCreatedBadRequest`). The `data` object carries `err_msg` plus a nested `metadata` object with `err_extra` and `err_code`.","required":["data"],"additionalProperties":false,"properties":{"data":{"type":"object","required":["err_msg","metadata"],"properties":{"err_msg":{"type":"string","description":"Error message describing the issue."},"metadata":{"type":"object","required":["err_extra","err_code"],"properties":{"err_extra":{"type":"string","description":"Additional error details."},"err_code":{"type":"integer","description":"HTTP error code."}}}}}}},"ErrorResponse":{"type":"object","description":"Cortex public-API error envelope used for `401`/`403`/`404` responses, matching the `reply`-based body used by `/platform/iam/v1/` (e.g. `Unauthorized`, `UnauthorizedImproperPermissions`).","required":["reply"],"additionalProperties":false,"properties":{"reply":{"type":"object","required":["err_msg","err_code"],"properties":{"err_msg":{"type":"string","description":"Error message describing what went wrong."},"err_extra":{"type":"string","nullable":true,"description":"Additional error details if available."},"err_code":{"type":"integer","description":"HTTP status code."}}}}}},"responses":{"BadRequest":{"description":"Bad Request — the request body fails validation (missing required fields, wrong type, value out of range, unknown cloud provider, etc).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BadRequestError"}}}},"Unauthorized":{"description":"Unauthorized — invalid or missing authentication credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"Forbidden":{"description":"Forbidden — the API key lacks `Cloud Consumption Command Center: View` permission, or the tenant does not have a Cloud license.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"NotFound":{"description":"Not Found — the Cloud Consumption dashboard is disabled for this tenant or the endpoint does not exist.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"TooManyRequests":{"description":"Too Many Requests — rate limit exceeded.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"InternalError":{"description":"Internal Server Error — an unexpected error occurred on the server.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}},"paths":{"/public_api/v1/system/get_tenant_info/":{"post":{"tags":["Licensing"],"summary":"Tenant license & entitlement info","description":"Returns the tenant's license and add-on entitlement information — purchased quotas, current usage/installed counts, expiration dates, add-on states, and (for Cloud / Cloud Posture licenses) a per-workload usage breakdown.\n\nBacked by the existing licensing service: it reuses `LicensingCalculatorService.get_license_status()` and projects the result through `TenantLicenseInfo.to_dict()`. The response **shape is tenant-type dependent** — XSIAM, XDR, XSOAR and Xpanse tenants each return a different set of fields. The endpoint takes no parameters; send an empty body.\n\nNote: the workload breakdown exposed here is filtered to `name` + `usage` only — it does **not** include billable-workload conversion, utilization percentage, over-quota flags, or tooltip breakdowns. For the Cloud Consumption dashboard license cards (with billable units and tooltips) use the `/platform/cloud-consumption/v1/license-runtime/` and `/platform/cloud-consumption/v1/license-posture/` endpoints instead.","operationId":"getTenantLicensesInfo","requestBody":{"required":false,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EmptyRequest"}}}},"responses":{"200":{"description":"Tenant license info returned successfully. The `reply` shape depends on the tenant type.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TenantLicenseInfoResponse"}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/TooManyRequests"},"500":{"$ref":"#/components/responses/InternalError"}}}}}}
```


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## 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, and the optional `goal` query parameter:

```
GET https://cortex-docs.paloaltonetworks.com/cortex-cloud-api/cloud-consumption-dashboard/licensing.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

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.
