BlackShield Python SDK
Official Python SDK for the BlackShield Security Platform.
Installation
pip install blackshield-sdk
Quick Start
import blackshield
client = blackshield.BlackShield(api_key="bsk_live_...")
# List critical findings
page = client.findings.list(severity=["critical", "high"], page_size=10)
for f in page.items:
print(f"{f.severity.value} | {f.title}")
# Get a specific finding
finding = client.findings.get("550e8400-e29b-41d4-a716-446655440000")
# Update finding status
client.findings.update_status(finding.id, status="in_progress", reason="Investigating")
Async Usage
import asyncio
from blackshield import AsyncBlackShield
async def main():
async with AsyncBlackShield(api_key="bsk_live_...") as client:
page = await client.findings.list(severity=["critical"])
for f in page.items:
print(f.title)
asyncio.run(main())
Available Resources
| Resource | Description | Example |
|---|---|---|
client.findings |
List, get, update findings | client.findings.list(severity=["critical"]) |
client.ingestion |
Ingest findings & assets | client.ingestion.ingest_findings([...]) |
client.dashboard |
Stats, trends, usage | client.dashboard.stats() |
client.compliance |
Compliance overview & controls | client.compliance.overview(framework="SOC2") |
client.reports |
Summaries & CSV/PDF exports | client.reports.export_findings_csv() |
client.easm |
External attack surface | client.easm.overview() |
client.threat_intel |
Blocklist & indicator lookup | client.threat_intel.lookup(indicator="1.2.3.4") |
client.connectors |
Connector health monitoring | client.connectors.freshness() |
client.api_keys |
API key management | client.api_keys.create(label="CI") |
client.policies |
Policy guardrails & custom Rego | client.policies.list_packs() |
client.security_reviews |
Guided security reviews & templates | client.security_reviews.get_default_template() |
client.audit |
Tenant audit logs & evidence export | client.audit.query(limit=50) |
client.alerts |
Alerts & alert sync integrations | client.alerts.list(severity=["critical"]) |
client.identity |
Identity, OIDC & mapping configs | client.identity.list_oidc() |
client.remediation |
Remediation & compensating controls | client.remediation.get_policy("default") |
client.ai_gateway |
AI Gateway client & usage logs | client.ai_gateway.list_clients() |
client.ai_assets |
AI asset inventory & ingestion | client.ai_assets.list(approval_status="unapproved") |
client.ai_integrations |
Tenant AI provider configuration | client.ai_integrations.preflight("openai", **config) |
client.assertions |
Security assertion suites & runs | client.assertions.activate(suite_id) |
client.customer_notifications |
Notification templates & delivery runs | client.customer_notifications.runs() |
client.dast |
Bounded DAST scans & findings | client.dast.get_scan(job_id) |
client.oauth_apps |
OAuth app and grant governance | client.oauth_apps.grants(status="pending_review") |
client.threat_modeling |
Hosted threat-model sessions & exports | client.threat_modeling.create_session(title="Review") |
Version 0.2.1 preserves the 0.2.0 surface and adds durable EASM verification outcomes, explicit challenge rotation, and synchronous/asynchronous AI provider configuration deletion. Version 0.2.0 added EASM asset-verification operations, AI Gateway client updates/deactivation, OAuth token exchange and governed chat completions. Reports v2 and Threat Intelligence v2 are part of the supported public surface. All new resources have matching synchronous and asynchronous implementations.
Official packages are released only by the Jenkins Publish SDK stage after
the Python 3.10–3.13 matrix and repository security gates pass. The stage
publishes an immutable PyPI version and fingerprints its wheel checksum; it
does not depend on a GitHub workflow, release, or tag.
Ingestion
from blackshield.types.ingestion import UnifiedFinding, AffectedResource, SourceMeta
finding = UnifiedFinding(
finding_type="vulnerability",
title="CVE-2024-1234 in openssl 3.0.8",
severity="critical",
cve_id="CVE-2024-1234",
affected_resource=AffectedResource(
resource_type="container_image",
resource_id="sha256:abc123",
resource_name="myapp:latest",
),
source=SourceMeta(scanner="trivy", scanner_version="0.50.0"),
dedup_key="vuln:CVE-2024-1234:sha256:abc123",
)
result = client.ingestion.ingest_findings([finding])
print(f"Job ID: {result.job_id}, Status: {result.status}")
# Poll for completion
job = client.ingestion.get_job(result.job_id)
print(f"Created: {job.created}, Updated: {job.updated}")
Error Handling
import blackshield
try:
finding = client.findings.get("nonexistent-id")
except blackshield.NotFoundError:
print("Finding not found")
except blackshield.RateLimitError as e:
print(f"Rate limited, retry after {e.retry_after}s")
except blackshield.AuthenticationError:
print("Invalid API key")
except blackshield.BlackShieldError as e:
print(f"API error: {e}")
Configuration
client = blackshield.BlackShield(
api_key="bsk_live_...",
base_url="https://api.blackshield.chaplau.com", # or self-hosted URL
timeout=60.0, # request timeout in seconds
max_retries=3, # automatic retries on 429/5xx
)
Development
cd sdk
pip install -e ".[dev]"
pytest -v --cov=blackshield
ruff check .
mypy .
Metadata
Release files for blackshield-sdk 0.2.1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| blackshield_sdk-0.2.1.tar.gz | 58.7 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| blackshield_sdk-0.2.1-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 129.1 kB
Release files / blackshield_sdk-0.2.1.tar.gz
| Download URL | blackshield_sdk-0.2.1.tar.gz |
|---|---|
| Size | 58.7 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
3fd88f20fbc0b62434276ba53cf02a3e888ea58c8db4abc36b30fad19fea337f
|
|
BLAKE2b-256 checksum How to use checksums |
17d858297b198e1574a86225e2926a4f902442954283db776ff4a6b7d81d2102
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.1.0 CPython/3.12.3
|
Release files / blackshield_sdk-0.2.1-py3-none-any.whl
| Download URL | blackshield_sdk-0.2.1-py3-none-any.whl |
|---|---|
| Size | 70.4 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
bc09328963d213e3cd6ed307196c809ddef1dabedd6b6acf80e5668042443cc6
|
|
BLAKE2b-256 checksum How to use checksums |
6be9cbe17173ef921619290bb8c6951718fa795b405990d1c73191e058ebc309
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.1.0 CPython/3.12.3
|