Python SDK for CRP-Comply — EU AI Act & GDPR compliance automation
Project description
crp-comply-sdk
Python SDK for CRP-Comply — EU AI Act & GDPR compliance automation. A thin, typed HTTP client covering every user-facing endpoint of the CRP-Comply REST API.
Install
pip install crp-comply-sdk
Quick Start
from crp_comply_sdk import CRPComply
with CRPComply(api_key="crp_...") as client:
# Account
me = client.me()
usage = client.usage()
# EU AI Act Article 6 risk classification
risk = client.risk_assessment(
system_name="Hiring Assistant",
category="employment",
affects_fundamental_rights=True,
)
# GDPR Article 35 DPIA
dpia = client.dpia(
system_name="Hiring Assistant",
data_subjects=["candidates", "employees"],
makes_automated_decisions=True,
)
# Full conformity evidence pack (zip with manifest + HMAC)
pack = client.evidence_pack(system_name="Hiring Assistant", category="employment")
zip_bytes = client.download_evidence_pack(pack["pack_id"])
with open("evidence.zip", "wb") as f:
f.write(zip_bytes)
API Surface
All methods are keyword-only. Every call is tier-gated server-side — a
CRPComplyTierError is raised with an upgrade_url when a feature isn't
available on your plan.
Compliance generation
| Method | Endpoint | Purpose |
|---|---|---|
risk_assessment(...) |
POST /risk-assessment |
EU AI Act Article 6 |
compliance_report(..., markdown=False) |
POST /compliance-report[/markdown] |
Full compliance status |
dpia(...) |
POST /dpia |
GDPR Article 35 DPIA |
transparency(system_name=...) |
POST /transparency |
AI Act Article 13 |
technical_docs(system_name=...) |
POST /technical-docs |
AI Act Article 11 |
audit_session(session_file=...) |
POST /audit |
Audit a CRP session |
full_report(...) |
POST /full-report |
Markdown mega-report |
Evidence packs
| Method | Endpoint |
|---|---|
evidence_pack(...) |
POST /evidence-pack — build new pack |
list_evidence_packs() |
GET /evidence-packs |
get_evidence_pack(pack_id) |
GET /evidence-packs/{id} — manifest |
download_evidence_pack(pack_id) |
GET /evidence-packs/{id}/download — raw zip bytes |
delete_evidence_pack(pack_id) |
DELETE /evidence-packs/{id} |
Persisted reports
| Method | Endpoint |
|---|---|
list_reports(kind=None) |
GET /reports?kind=... |
get_report(report_id) |
GET /reports/{id} |
get_report_markdown(report_id) |
GET /reports/{id}/markdown — returns str |
delete_report(report_id) |
DELETE /reports/{id} |
SDK gateway (realtime checks)
| Method | Endpoint |
|---|---|
features() |
GET /sdk/features — tier feature matrix |
audit(prompt=..., response=...) |
POST /sdk/audit — PII + injection + risk |
classify_risk(...) |
POST /sdk/classify — quick AI Act bucket |
Account
| Method | Endpoint |
|---|---|
health() |
GET /health (unauthenticated) |
me() |
GET /me — profile + tier + provider status |
usage() |
GET /usage — monthly quota breakdown |
Configuration
| Option | Env var | Default |
|---|---|---|
api_key |
CRP_COMPLY_API_KEY |
— (required) |
base_url |
CRP_COMPLY_BASE_URL |
https://comply.crprotocol.io/api/v1 |
timeout |
— | 60 seconds |
import os
os.environ["CRP_COMPLY_API_KEY"] = "crp_..."
os.environ["CRP_COMPLY_BASE_URL"] = "https://comply.crprotocol.io/api/v1"
from crp_comply_sdk import CRPComply
client = CRPComply() # picks up env vars
LLM Backends
CRP-Comply is LLM-agnostic. Configure your preferred backend server-side at Settings → LLM Provider. Supported:
| Backend | Default URL | Notes |
|---|---|---|
| OpenAI | https://api.openai.com/v1 |
Cloud |
| Anthropic | https://api.anthropic.com/v1 |
Cloud |
| LM Studio | http://localhost:1234/v1 |
Local, OpenAI-compatible |
| Ollama | http://localhost:11434/v1 |
Local, OpenAI-compatible |
| Custom | any | Any OpenAI-compatible endpoint |
Exception Hierarchy
CRPComplyError # base — all SDK errors
├── CRPComplyAuthError # 401, 403 — invalid / missing API key
├── CRPComplyQuotaError # 429 — monthly quota exhausted (has .upgrade_url)
├── CRPComplyTierError # 402 — feature not in tier (has .upgrade_url,
│ # .feature, .current_tier, .required_tier)
└── CRPComplyServerError # 5xx — server-side failure
from crp_comply_sdk import CRPComply, CRPComplyTierError, CRPComplyQuotaError
try:
pack = client.evidence_pack(system_name="X", category="y")
except CRPComplyTierError as exc:
print(f"Upgrade required: {exc.upgrade_url}")
except CRPComplyQuotaError as exc:
print(f"Quota exhausted. Upgrade at {exc.upgrade_url}")
License
Apache-2.0 — see LICENSE.
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file crp_comply_sdk-0.1.1.tar.gz.
File metadata
- Download URL: crp_comply_sdk-0.1.1.tar.gz
- Upload date:
- Size: 12.1 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
33771d7151717a24015e9e10af00222f89b8f29211bc8ea209d8602856b10fa5
|
|
| MD5 |
b79caa37ea08be24ce861dd332e569b7
|
|
| BLAKE2b-256 |
0d5ea8263f9ae100417005269f638d246b6b6138513926549003c8216076ced4
|
File details
Details for the file crp_comply_sdk-0.1.1-py3-none-any.whl.
File metadata
- Download URL: crp_comply_sdk-0.1.1-py3-none-any.whl
- Upload date:
- Size: 9.7 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
b283e301d279dd4eee3926f39d7bab0d999c0d75db2d231055de0009bf1dae98
|
|
| MD5 |
7933e0a8a35e1db7793d3be583f124a7
|
|
| BLAKE2b-256 |
576e54d02a31a03b8c482a67c120ba57d4f33d5677ca8579042abd012c62b440
|