Cisco PSIRT openVuln API
Cisco PSIRT openVuln API
Cisco's PSIRT openVuln REST API returns Cisco security-advisory data in JSON or XML, with advisory IDs, CVEs, bug IDs, product names, severity, CVSS, publication and update times, summaries, status and CSAF links. A no-charge Cisco.com account, registered application credentials and an OAuth 2.0 bearer token are required.
Coverage
The API covers Cisco-published security advisories and supports queries by advisory, CVE, bug ID, product, operating-system release, year, severity and publication or update dates. Results can be paginated; default application limits are 5 calls per second, 30 per minute and 5,000 per day. Cisco does not state the earliest advisory date in the checked documentation.
Verdict
This is defensive data for mapping Cisco products and software releases to vendor-issued vulnerabilities, severity and remediation advisories. Advisory records can be revised, so retain both firstPublished and lastUpdated and refresh cached results. Product-name and software-release matching is vendor-specific, pagination is required for broad pulls, and rate limits constrain continuous polling. The API licence limits clients to software that works with Cisco products or services and prohibits substantially replicating a Cisco service.
Get the free weekly email
Free weekly email of newly verified free data. Unsubscribe by emailing us.
By entering your email and clicking Subscribe, you agree to receive the Signal Lab weekly email from Quantum Data Technologies Ltd., 3200-650 West Georgia Street, Vancouver, BC V6B 4P7, Canada (signal-lab@qdt.ai). You can unsubscribe at any time: reply "unsubscribe" to any email or write to signal-lab@qdt.ai. See our Privacy Policy.
Use in your agent
Load recent Cisco advisories into pandas and Parquet. Checked against the provider's documentation on Nov 1, 2026.
Access
- Create a no-charge Cisco.com account and register a service application for the Cisco PSIRT openVuln API.
- Store the application credentials in CISCO_CLIENT_ID and CISCO_CLIENT_SECRET; exchange them for a one-hour OAuth bearer token.
Request
curl -H "Authorization: Bearer $CISCO_OPENVULN_TOKEN" -H 'Accept: application/json' 'https://apix.cisco.com/security/advisories/v2/latest/10'Format
JSON with an advisories array; records can include advisoryId, advisoryTitle, bugIDs, cves, cvssBaseScore, cwe, productNames, firstPublished, lastUpdated, status, version, severity, summary and CSAF or publication URLs.
Load into pandas and Parquet
Needs Python 3 with requests, pandas and pyarrow.
"""Latest Cisco PSIRT advisories -> pandas -> Parquet. Needs free app credentials."""
import json
import os
import requests
import pandas as pd
token_response = requests.post(
"https://id.cisco.com/oauth2/default/v1/token",
data={"client_id": os.environ["CISCO_CLIENT_ID"],
"client_secret": os.environ["CISCO_CLIENT_SECRET"],
"grant_type": "client_credentials"},
timeout=60,
)
token_response.raise_for_status()
token = token_response.json()["access_token"]
url = "https://apix.cisco.com/security/advisories/v2/latest/10"
r = requests.get(url, headers={"Authorization": f"Bearer {token}",
"Accept": "application/json"}, timeout=60)
r.raise_for_status()
payload = r.json()
df = pd.json_normalize(payload.get("advisories", []), sep=".")
for column in df.columns:
if df[column].map(lambda value: isinstance(value, (list, dict))).any():
df[column] = df[column].map(lambda value: json.dumps(value) if isinstance(value, (list, dict)) else value)
for column in ("firstPublished", "lastUpdated"):
if column in df:
df[column] = pd.to_datetime(df[column], errors="coerce", utc=True)
df.to_parquet("cisco_psirt_latest.parquet", index=False)
print(len(df), "Cisco advisories", df["lastUpdated"].max().isoformat())Not run: it needs a free API key.
Limits
- Rate limit: 5 calls per second, 30 calls per minute and 5,000 calls per day per application.
- Broad result sets are paginated with pageIndex and pageSize.
- OAuth access tokens in the provider example expire after 3,600 seconds.
Quirks
- Advisories can change after first publication; keep firstPublished, lastUpdated, status and version.
- Arrays such as cves, bugIDs, cwe and productNames are JSON-encoded before Parquet export.
- A 429 response indicates quota exhaustion; respect Retry-After when the header is present.
Terms and attribution
- API clients must be used for deployments with Cisco products or services and may not substantially replicate the underlying Cisco service.
- Credentials must remain confidential, may not be embedded in open-source projects and must be encrypted in transit.
Sources
- https://developer.cisco.com/docs/psirt/: “The Cisco PSIRT openVuln API can retrieve the Cisco advisory information in either .json or .xml format.”
- https://developer.cisco.com/docs/psirt/authentication/: “The Cisco PSIRT openVuln API applications require an API "access token" in order to authenticate each individual API request.”
- https://developer.cisco.com/docs/psirt/browsing-sorting-filterting-and-rate-limits/: “5000 calls per day”
- https://developer.cisco.com/site/license/terms-and-conditions/: “There is no charge for Cisco DevNet registration.”
Information and education only. Not financial, investment, legal or tax advice. Listings can be inaccurate, incomplete or out of date and are provided "as is". Free tiers, limits and licenses belong to each provider and can change, so check the provider's own terms before you rely on them. Terms & Disclaimer