Quickstart
5 minInstall the SDK, initialise the client with your API key, and make your first API call. The SDK is available for Node.js, Python, Go, Java, and Ruby.
1. Install
npm install @privacyops/sdk
2. Initialise
import { PrivacyOps } from '@privacyops/sdk';
const privacy = new PrivacyOps({
apiKey: process.env.PRIVACYOPS_API_KEY,
region: 'me-riyadh-1', // 'eu-west-1' | 'us-east-1' | 'ap-southeast-1'
environment: 'production',
});Store your API key in an environment variable — never commit it to source control. Use PRIVACYOPS_API_KEY as the variable name; the SDK picks it up automatically if no apiKey option is passed.
3. Make your first call
const status = await privacy.health.check();
console.log(status); // { ok: true, region: 'me-riyadh-1', latencyMs: 42 }SDKs & Libraries
Official SDKs are maintained by the PrivacyOps team and track the latest API version.
npm install @privacyops/sdkv2.4.1
pip install privacyopsv2.3.0
go get github.com/privacyops/go-sdkv2.1.0
implementation "io.privacyops:sdk:2.0.0"v2.0.0
gem install 'privacyops'v1.9.2
composer require privacyops/sdkv1.8.0
Authentication & API Keys
All API requests are authenticated with a Bearer token. Keys are scoped to an environment (production / staging) and can be restricted to specific API modules.
// All requests require a Bearer token curl -X GET https://api.privacy-ops.io/v1/consent/user_abc123 \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "X-PrivacyOps-Region: me-riyadh-1" // Rotate your API key curl -X POST https://api.privacy-ops.io/v1/auth/rotate-key \ -H "Authorization: Bearer YOUR_API_KEY"
Key scoping
Restrict keys to specific modules (consent-only, read-only, etc.) from the dashboard.
Key rotation
Rotate keys without downtime — old key remains valid for 24 h after rotation.
Audit log
Every API call is logged with timestamp, IP, key ID, and response code.
Data Residency & Regions
Choose the region where your data is stored and processed. Data never leaves the selected region unless you explicitly configure cross-border transfers.
| Region ID | Location | Frameworks | Status |
|---|---|---|---|
| me-riyadh-1 | Riyadh, Saudi Arabia | PDPL, NCA | GA |
| eu-west-1 | Dublin, Ireland | GDPR, ISO 27001 | GA |
| eu-central-1 | Frankfurt, Germany | GDPR, BSI C5 | GA |
| us-east-1 | Virginia, USA | CCPA, HIPAA, SOC 2 | GA |
| ap-southeast-1 | Singapore | PDPA, MAS TRM | GA |
| me-uae-1 | Abu Dhabi, UAE | DIFC, ADGM | Preview |
Consent Management
Capture, store, and enforce granular consent records across every channel. The consent engine is jurisdiction-aware — it automatically applies the correct legal basis rules for GDPR, PDPL, CCPA, and more.
SDK — Capture, Check & Withdraw
// Capture consent at the point of collection
await privacy.consent.capture({
userId: 'user_abc123',
purposes: ['analytics', 'marketing', 'personalization'],
source: 'cookie-banner-v2',
ipAddress: req.ip,
userAgent: req.headers['user-agent'],
legalBasis: 'consent', // 'consent' | 'legitimate_interest' | 'contract'
jurisdiction: 'SA', // ISO 3166-1 alpha-2
consentVersion: '2.1',
});
// Check before processing
const allowed = await privacy.consent.check({
userId: 'user_abc123',
purpose: 'analytics',
});
if (!allowed) return;
// Withdraw
await privacy.consent.withdraw({
userId: 'user_abc123',
purposes: ['marketing'],
reason: 'user_request',
});Drop-in Consent Banner
Add a single script tag to your front-end. The banner auto-detects the visitor's jurisdiction and renders the appropriate consent UI.
<!-- Drop-in consent banner (auto-detects jurisdiction) --> <script src="https://cdn.privacy-ops.io/banner/v2/bundle.js" data-api-key="YOUR_API_KEY" data-theme="light" data-position="bottom" data-auto-block="true"> </script>
Under PDPL (Saudi Arabia) and GDPR, consent must be freely given, specific, informed, and unambiguous. The PrivacyOps consent engine enforces these requirements and stores a cryptographically signed audit record for every consent event.
Cookie Management
Automatically discover, classify, and govern all cookies and trackers on your web properties. Sync scan results directly to your consent banner so categories stay accurate without manual updates.
// Scan a domain for cookies and trackers
const scan = await privacy.cookies.scan({
domain: 'www.company.com',
depth: 'full', // 'homepage' | 'full'
includeSubdomains: true,
});
// scan.found: [
// { name: '_ga', category: 'analytics', duration: '2 years', thirdParty: true, vendor: 'Google Analytics' },
// { name: 'session_id', category: 'necessary', duration: 'session', thirdParty: false, vendor: 'internal' },
// { name: 'fbp', category: 'marketing', duration: '3 months', thirdParty: true, vendor: 'Meta Pixel' },
// ]
// Sync scan results to consent banner categories
await privacy.cookies.syncToBanner({
scanId: scan.id,
autoBlock: ['marketing', 'analytics'], // block until consent given
});Automated scanning
Crawl your entire domain to discover first- and third-party cookies, pixels, and SDKs.
Auto-categorisation
AI-powered classification into necessary, analytics, marketing, and preferences categories.
Banner sync
Push updated cookie lists to your consent banner automatically after each scan.
Vendor identification
Identify the vendor behind each cookie and link to their privacy policy.
Scheduled rescans
Set weekly or monthly rescans to catch new cookies added by third-party scripts.
Compliance reports
Generate cookie audit reports for GDPR, PDPL, and ePrivacy Directive compliance.
Data Subject Rights (DSR)
Automate the full DSR lifecycle — intake, identity verification, fulfilment, and response — within statutory deadlines. Supports all request types across GDPR, PDPL, CCPA, and HIPAA.
Access
Right to know what data is held
Erasure
Right to be forgotten
Rectification
Right to correct inaccurate data
Portability
Right to receive data in machine-readable format
Restriction
Right to limit processing
Objection
Right to object to processing
SDK — Submit & Fulfil
// Submit a Data Subject Request
const request = await privacy.dsr.submit({
type: 'access', // 'access' | 'erasure' | 'rectification' | 'portability' | 'restriction' | 'objection'
subjectEmail: '[email protected]',
subjectName: 'Jane Smith',
jurisdiction: 'SA',
verificationMethod: 'email_otp',
metadata: { requestChannel: 'web-portal' },
});
// Returns: { id: 'dsr_01HXY...', status: 'pending', deadline: '2026-07-13T...' }
// Fulfil a request (called from your internal workflow)
await privacy.dsr.fulfil({
requestId: request.id,
action: 'export',
dataPackage: exportedUserData, // Buffer | ReadableStream
format: 'json',
});Webhook Payload
// Webhook payload for new DSR
{
"event": "dsr.received",
"data": {
"id": "dsr_01HXY9ABCDEF",
"type": "erasure",
"subjectEmail": "[email protected]",
"jurisdiction": "SA",
"deadline": "2026-07-13T00:00:00Z",
"status": "pending"
}
}PDPL (Saudi Arabia) requires DSR responses within 30 days. GDPR requires responses within 30 days (extendable to 90 days for complex requests). PrivacyOps automatically tracks deadlines and sends escalation alerts at 7 days, 3 days, and 1 day before expiry.
Data Discovery & Records of Processing Activities (RoPA)
Automatically scan connected data sources to classify PII, build your data inventory, and maintain a live RoPA — a legal requirement under GDPR Art. 30 and PDPL Art. 12.
PII Discovery Scan
// Connect a data source and run a PII scan
const scan = await privacy.discovery.scan({
source: {
type: 'postgresql',
connectionString: process.env.DB_URL,
},
options: {
depth: 'full',
classifiers: ['email', 'phone', 'national_id', 'credit_card', 'ip_address', 'dob'],
schedule: 'weekly',
sampleSize: 1000,
},
});
const result = await privacy.discovery.getResult(scan.id);
// result.findings:
// [
// { table: 'users', column: 'email', type: 'EMAIL', count: 48203, risk: 'high' },
// { table: 'orders', column: 'billing_phone', type: 'PHONE', count: 12891, risk: 'medium' },
// { table: 'logs', column: 'ip', type: 'IP_ADDRESS', count: 2100000, risk: 'low' },
// ]RoPA Management
Create and maintain processing activity records. Export a complete RoPA for regulator submission at any time.
// Create a Record of Processing Activity
const activity = await privacy.ropa.create({
name: 'Customer Order Processing',
purpose: 'Fulfil purchase orders and manage customer accounts',
legalBasis: 'contract',
dataCategories: ['contact', 'financial', 'transactional'],
dataSubjects: ['customers'],
retentionPeriod: { value: 7, unit: 'years' },
processors: [
{ name: 'Stripe', role: 'payment_processor', country: 'US', safeguard: 'scc' },
{ name: 'AWS', role: 'cloud_hosting', country: 'SA', safeguard: 'adequacy' },
],
crossBorderTransfers: true,
transferMechanism: 'standard_contractual_clauses',
});
// Export full RoPA as PDF or Excel
const export_ = await privacy.ropa.export({ format: 'pdf', includeEvidence: true });Connect your databases, cloud storage, and SaaS tools once — PrivacyOps continuously monitors for new PII fields and automatically flags them for review in your data inventory.
Data Mapping
Build a complete, visual map of how personal data flows through your organisation — across systems, teams, and borders. Data maps are required evidence for PDPL, GDPR, and most enterprise privacy audits.
// Register a data flow between systems
await privacy.dataMap.addFlow({
source: { system: 'CRM', field: 'email', category: 'contact' },
destination: { system: 'Email Marketing Platform', field: 'email_address' },
purpose: 'marketing',
legalBasis: 'consent',
transferType: 'internal', // 'internal' | 'third_party' | 'cross_border'
encrypted: true,
});
// Get a visual data map for a specific system
const map = await privacy.dataMap.getSystemMap('CRM');
// Returns nodes, edges, risk scores, and processing purposes
// Export as JSON or PDF for regulator submission
const export_ = await privacy.dataMap.export({ format: 'pdf', includeRiskScores: true });System-to-system flows
Map every data movement between internal systems, cloud services, and third parties.
Visual graph export
Export interactive data flow diagrams as PDF or SVG for regulator submissions and board reporting.
Risk overlay
Overlay risk scores on the data map to immediately identify high-risk flows requiring attention.
Change detection
Automatically detect new data flows introduced by engineering changes and alert the DPO.
Data Retention & Deletion
Define, enforce, and audit retention schedules across every data category. Automate deletion runs with legal hold support — ensuring data is kept no longer than necessary and removed securely when its retention period expires.
// Define a retention policy for a data category
await privacy.retention.createPolicy({
name: 'Customer Records — Financial',
dataCategory: 'financial',
retentionPeriod: { value: 7, unit: 'years' },
legalBasis: 'legal_obligation',
jurisdiction: 'SA',
regulation: 'Saudi Companies Law Art. 68',
deletionMethod: 'cryptographic_erasure', // 'hard_delete' | 'anonymisation' | 'cryptographic_erasure'
reviewCycle: 'annual',
});
// Trigger a deletion run for expired records
const run = await privacy.retention.runDeletion({
dryRun: true, // set false to execute
categories: ['marketing_leads'],
olderThan: '2024-01-01',
});
// run.scheduled: 4821 records
// run.exemptions: 12 records (active legal hold)Jurisdiction-aware schedules
Apply different retention periods per jurisdiction — e.g. 7 years for financial records under Saudi Companies Law, 5 years under GDPR.
Legal hold management
Place a legal hold on specific records to exempt them from automated deletion during litigation or regulatory investigation.
Deletion methods
Choose hard delete, anonymisation, or cryptographic erasure per data category. All deletions are logged in the immutable audit trail.
Under PDPL Art. 19 and GDPR Art. 5(1)(e), personal data must not be kept longer than necessary for the purpose it was collected. PrivacyOps retention policies are linked directly to your RoPA processing activities to ensure alignment.
DPIAs & Privacy Assessments
Conduct Data Protection Impact Assessments (DPIAs), Privacy Impact Assessments (PIAs), and Legitimate Interest Assessments (LIAs) through a structured, auditable workflow. Required under GDPR Art. 35 and PDPL Art. 25 for high-risk processing.
DPIA
Required for high-risk processing — profiling, large-scale sensitive data, systematic monitoring.
PIA
Broader privacy risk assessment for new projects, products, or system changes.
LIA
Legitimate Interest Assessment to document and justify processing under legitimate interest basis.
// Initiate a DPIA (Data Protection Impact Assessment)
const dpia = await privacy.dpia.create({
projectName: 'AI-Powered Customer Scoring',
description: 'Automated profiling of customers for credit risk',
processingTypes: ['automated_decision_making', 'profiling', 'large_scale'],
dataCategories: ['financial', 'behavioural'],
riskLevel: 'high',
assignedTo: '[email protected]',
});
// Add risk entries
await privacy.dpia.addRisk(dpia.id, {
risk: 'Discriminatory profiling outcomes',
likelihood: 'possible',
severity: 'high',
mitigation: 'Bias audits every quarter; human review for adverse decisions',
residualRisk: 'low',
});
// Submit for DPO sign-off
await privacy.dpia.submit(dpia.id);DPIAs must be completed before processing begins for high-risk activities. PrivacyOps integrates with your project management tools (Jira, ServiceNow) to trigger DPIA workflows automatically when a new project is flagged as high-risk.
Breach Management & Incident Response
Detect, log, investigate, and notify breaches within regulatory deadlines. PrivacyOps tracks the 72-hour GDPR and PDPL notification windows automatically, with escalation alerts and regulator notification templates.
// Register webhook for breach events
await privacy.incidents.registerWebhook({
url: 'https://your-app.com/webhooks/privacyops',
events: ['breach.detected', 'breach.confirmed', 'breach.resolved'],
secret: process.env.WEBHOOK_SECRET,
});
// Handle incoming event
app.post('/webhooks/privacyops', (req, res) => {
const event = privacy.webhooks.verify(req.body, req.headers['x-privacyops-signature']);
if (event.type === 'breach.confirmed') {
const { severity, affectedRecords, dataTypes, notificationDeadline } = event.data;
// notificationDeadline = 72h from detection (GDPR Art. 33)
// Trigger your internal incident response runbook
}
res.status(200).json({ received: true });
});
// Manually log an incident
const incident = await privacy.incidents.create({
type: 'unauthorised_access',
severity: 'high',
affectedRecords: 1200,
dataTypes: ['email', 'hashed_password'],
discoveredAt: new Date().toISOString(),
containmentActions: ['Revoked compromised tokens', 'Forced password reset'],
});72-hour deadline tracking
Automatic countdown from detection. Escalation alerts at 48 h, 24 h, and 6 h.
Regulator notification templates
Pre-built templates for SDAIA (Saudi Arabia), ICO (UK), DPC (Ireland), and more.
Affected subject notification
Bulk email notifications to affected data subjects with audit trail.
Incident severity scoring
Automated risk scoring based on data types, volume, and likely harm.
Third-Party & Vendor Management
Maintain a complete register of data processors and sub-processors. Track DPA execution, run periodic risk assessments, and get alerts when vendors are due for review or when their certifications expire.
// Register a third-party vendor
const vendor = await privacy.vendors.create({
name: 'Salesforce',
category: 'crm',
dataShared: ['contact', 'transactional'],
country: 'US',
dpaExecuted: true,
dpaUrl: 'https://internal.company.com/dpa/salesforce.pdf',
reviewCycle: 'annual',
contactEmail: '[email protected]',
});
// Run a vendor risk assessment
const assessment = await privacy.vendors.assess(vendor.id, {
questionnaire: 'standard_v3',
dueDate: '2026-09-01',
});
// List vendors due for review
const due = await privacy.vendors.listDueForReview({ withinDays: 30 });Under GDPR Art. 28 and PDPL Art. 33, you must have a Data Processing Agreement (DPA) in place with every processor before sharing personal data. PrivacyOps tracks DPA status and blocks data-sharing API calls to vendors without an executed DPA when enforcement mode is enabled.
Children's Data Protection
Apply enhanced protections for data subjects under the age of consent. PrivacyOps enforces age-appropriate defaults — no profiling, no behavioural advertising, no cross-context data sharing — and manages parental consent workflows.
Age of consent by jurisdiction
Automatically applies the correct age threshold: 13 (COPPA/USA), 15 (France), 16 (GDPR default), 18 (Saudi Arabia PDPL).
Parental consent workflows
Email-verified parental consent capture with audit trail. Supports delegated consent management.
Automatic processing restrictions
Flags minor accounts and blocks non-permitted processing operations at the API level.
// Flag a user as a minor and apply enhanced protections
await privacy.subjects.setAgeGroup({
userId: 'user_xyz',
ageGroup: 'minor', // 'minor' | 'adult'
verificationMethod: 'parental_consent_form',
parentEmail: '[email protected]',
});
// Consent capture for minors requires parental approval
await privacy.consent.captureParental({
childUserId: 'user_xyz',
parentUserId: 'parent_abc',
purposes: ['service_delivery'],
verifiedAt: new Date().toISOString(),
});
// Automatically restrict data processing for minors
const profile = await privacy.subjects.getProfile('user_xyz');
// profile.restrictions: ['no_profiling', 'no_marketing', 'no_cross_context_sharing']Cross-Border Data Transfers
Register, assess, and enforce cross-border transfer mechanisms. PrivacyOps maintains an up-to-date adequacy decision database and checks transfers against current regulatory rules before data leaves a jurisdiction.
// Register a cross-border transfer
const transfer = await privacy.transfers.create({
fromJurisdiction: 'SA',
toJurisdiction: 'US',
recipient: 'AWS Inc.',
dataCategories: ['contact', 'transactional'],
transferMechanism: 'standard_contractual_clauses',
sccVersion: '2021/914/EU',
tiaCompleted: true, // Transfer Impact Assessment
approvedBy: '[email protected]',
approvedAt: new Date().toISOString(),
});
// Check if a transfer is permitted under current rules
const check = await privacy.transfers.check({
fromJurisdiction: 'SA',
toJurisdiction: 'CN',
dataCategories: ['health'],
});
// check.permitted: false
// check.reason: 'No adequacy decision; SCCs insufficient for health data under PDPL Art. 29'| Mechanism | Applicable frameworks | Notes |
|---|---|---|
| Adequacy Decision | GDPR, PDPL | No additional safeguards needed |
| Standard Contractual Clauses | GDPR, PDPL, LGPD | Must complete Transfer Impact Assessment (TIA) |
| Binding Corporate Rules | GDPR | For intra-group transfers; requires DPA approval |
| Explicit Consent | GDPR, PDPL, CCPA | Data subject must be informed of risks |
| Contractual Necessity | GDPR, PDPL | Limited to what is strictly necessary |
Privacy by Design & Default
Embed privacy into your engineering and product workflows from day one. PrivacyOps provides checklists, sign-off workflows, and CI/CD integrations to make Privacy by Design a standard part of your SDLC.
Proactive, not reactive
Anticipate and prevent privacy risks before they materialise.
Privacy as the default
Maximum privacy protection without any action required from the user.
Privacy embedded into design
Privacy is a core component, not an add-on.
Full functionality
Positive-sum — privacy and functionality are not traded off.
End-to-end security
Full lifecycle protection from collection to deletion.
Visibility and transparency
All stakeholders can verify privacy practices.
Respect for user privacy
Keep it user-centric — strong defaults, clear notices, user control.
// Attach a Privacy by Design checklist to a project
const project = await privacy.pbd.createProject({
name: 'New Mobile App — v3.0',
owner: '[email protected]',
launchDate: '2026-10-01',
});
await privacy.pbd.checkItem(project.id, {
principle: 'data_minimisation',
status: 'compliant',
evidence: 'Only email and phone collected; no DOB required',
reviewedBy: '[email protected]',
});
// Generate a Privacy by Design sign-off report
const report = await privacy.pbd.generateReport(project.id, { format: 'pdf' });DPO Management
Give your Data Protection Officer a dedicated workspace to manage tasks, track obligations, log consultations, and maintain oversight of the entire privacy programme — all in one place.
// Create a DPO task
const task = await privacy.dpo.createTask({
title: 'Review DPIA for AI Scoring Project',
type: 'dpia_review',
priority: 'high',
dueDate: '2026-07-01',
assignedTo: '[email protected]',
linkedRecordType: 'dpia',
linkedRecordId: 'dpia_01HXY...',
});
// Get DPO workload summary
const workload = await privacy.dpo.getWorkload('[email protected]');
// workload.openTasks: 14
// workload.overdueItems: 2
// workload.upcomingDeadlines: [{ type: 'dsr', deadline: '2026-06-20', count: 3 }]
// Log a DPO consultation
await privacy.dpo.logConsultation({
topic: 'New HR analytics system',
outcome: 'DPIA required before go-live',
participants: ['[email protected]', '[email protected]'],
date: new Date().toISOString(),
});Task & obligation tracker
Centralised task list for DPIA reviews, DSR sign-offs, vendor assessments, and regulatory deadlines.
Consultation log
Maintain a searchable record of all DPO consultations — required evidence under GDPR Art. 38 and PDPL.
Workload dashboard
Real-time view of open tasks, overdue items, and upcoming deadlines across all privacy modules.
Board reporting
One-click privacy programme status reports for board and executive audiences, with trend data.
DPO independence controls
Role-based access ensures the DPO can access all processing activities without being able to modify them.
Multi-DPO support
Assign regional or functional DPOs with scoped visibility — e.g. a Saudi DPO for PDPL, an EU DPO for GDPR.
Audit & Compliance Log
Every action taken within PrivacyOps — consent events, DSR fulfilments, data accesses, configuration changes, admin actions — is written to an immutable, cryptographically signed audit log. Tamper-evident and regulator-ready.
// Query the immutable audit log
const logs = await privacy.audit.query({
from: '2026-01-01T00:00:00Z',
to: '2026-06-30T23:59:59Z',
eventTypes: ['consent.captured', 'dsr.fulfilled', 'data.accessed'],
userId: 'user_abc123', // optional — filter by subject
actorId: 'admin_xyz', // optional — filter by operator
limit: 100,
cursor: undefined, // pagination
});
// Export audit log for regulator submission
const export_ = await privacy.audit.export({
format: 'csv',
period: { from: '2026-01-01', to: '2026-06-30' },
signed: true, // cryptographically signed export
});Export a signed audit log at any time for regulator submission. The export includes a cryptographic hash chain that proves no records have been altered or deleted since the log was created.
Compliance Monitoring & Scoring
Get a real-time compliance health score across every framework you operate under. Automated checks run daily against your live data — consent coverage, DSR response times, RoPA completeness, vendor DPA status, and more.
// Set up a real-time compliance health check
const monitor = await privacy.compliance.createMonitor({
name: 'PDPL Baseline Monitor',
framework: 'pdpl',
checks: [
'consent_coverage',
'dsr_response_time',
'ropa_completeness',
'vendor_dpa_coverage',
'breach_notification_readiness',
],
alertThreshold: 'medium', // 'low' | 'medium' | 'high' | 'critical'
notifyEmail: '[email protected]',
schedule: 'daily',
});
// Get current compliance score
const score = await privacy.compliance.getScore({ framework: 'pdpl' });
// score.overall: 87
// score.breakdown: { consent: 94, dsr: 82, ropa: 91, vendors: 78, breach: 90 }Multi-framework scoring
Separate compliance scores for PDPL, GDPR, CCPA, HIPAA, NCA, and ISO 27001 — each with a breakdown by control area.
Gap analysis
Automatically identify compliance gaps and generate a prioritised remediation plan with effort estimates.
Trend reporting
Track compliance score over time to demonstrate continuous improvement to regulators and auditors.
Regulatory Intelligence
Stay ahead of regulatory change. PrivacyOps monitors legislation, enforcement actions, and regulatory guidance across all your operating jurisdictions and alerts you to changes that affect your privacy programme.
// Subscribe to regulatory updates for your jurisdictions
await privacy.regulatory.subscribe({
jurisdictions: ['SA', 'EU', 'US-CA', 'BH', 'QA'],
categories: ['new_regulation', 'amendment', 'enforcement_action', 'guidance'],
notifyEmail: '[email protected]',
webhookUrl: 'https://your-app.com/webhooks/regulatory',
});
// Get latest updates
const updates = await privacy.regulatory.getUpdates({
jurisdiction: 'SA',
since: '2026-01-01',
limit: 20,
});
// updates[0]: {
// title: 'SDAIA issues updated PDPL implementing regulations',
// jurisdiction: 'SA',
// effectiveDate: '2026-03-01',
// impact: 'high',
// affectedModules: ['consent', 'cross_border_transfers'],
// }Multi-jurisdiction monitoring
Track SDAIA (Saudi Arabia), EDPB (EU), ICO (UK), FTC (USA), PDPC (Singapore), and 30+ other regulators.
Impact assessment
Each update is tagged with affected PrivacyOps modules and an estimated impact level (low / medium / high / critical).
Enforcement tracker
Monitor enforcement actions and fines in your sector to benchmark your own programme against peer organisations.
Regulatory calendar
Upcoming effective dates, consultation deadlines, and reporting obligations surfaced in your DPO dashboard.
Privacy Training & Awareness
Assign, track, and report on privacy training across your entire organisation. Mandatory training completion is a regulatory requirement under PDPL, GDPR, and NCA — PrivacyOps makes it auditable.
// Assign a training module to a user
await privacy.training.assign({
userId: 'emp_456',
moduleId: 'pdpl-fundamentals-v2',
dueDate: '2026-07-31',
mandatory: true,
});
// Bulk assign to a department
await privacy.training.bulkAssign({
department: 'engineering',
moduleIds: ['privacy-by-design-101', 'data-handling-secure'],
dueDate: '2026-08-31',
});
// Get training completion report
const report = await privacy.training.getComplianceReport({
department: 'all',
period: { from: '2026-01-01', to: '2026-06-30' },
});
// report.completionRate: 84%
// report.overdueCount: 23Module library
Pre-built training modules for PDPL fundamentals, GDPR essentials, data handling, Privacy by Design, and incident response.
Role-based assignment
Assign different modules to engineers, HR, marketing, and executives based on their data access and processing responsibilities.
Completion tracking
Real-time completion dashboards per department. Automated reminders for overdue learners.
Assessment & scoring
End-of-module assessments with pass/fail thresholds. Failed attempts trigger automatic re-assignment.
Audit-ready reports
Generate training completion certificates and department-level reports for regulator submissions.
Custom content
Upload your own training materials (PDF, video, SCORM) alongside the PrivacyOps module library.
REST API Reference
Base URL: https://api.privacy-ops.io · Current version: v1
All responses are JSON. Dates are ISO 8601. Pagination uses cursor-based ?after= parameters.
Consent
/v1/consent/capture/v1/consent/:userId/v1/consent/:userId/withdraw/v1/consent/:userId/historyCookies
/v1/cookies/scan/v1/cookies/scans/:id/v1/cookies/sync-bannerData Subject Rights
/v1/dsr/v1/dsr/:id/v1/dsr/:id/fulfil/v1/dsrData Discovery & Mapping
/v1/discovery/scan/v1/discovery/scans/:id/v1/discovery/inventory/v1/data-map/flows/v1/data-map/systems/:id/v1/data-map/exportRetention
/v1/retention/policies/v1/retention/policies/v1/retention/run/v1/retention/runs/:idRoPA
/v1/ropa/v1/ropa/v1/ropa/:id/v1/ropa/exportDPIAs
/v1/dpia/v1/dpia/:id/v1/dpia/:id/risks/v1/dpia/:id/submitIncidents & Breach
/v1/incidents/v1/incidents/v1/incidents/:id/v1/incidents/webhooksVendors
/v1/vendors/v1/vendors/v1/vendors/:id/assessTransfers
/v1/transfers/v1/transfers/check/v1/transfersDPO & Governance
/v1/dpo/tasks/v1/dpo/workload/:dpoId/v1/dpo/consultationsAudit Log
/v1/audit/v1/audit/exportCompliance Monitoring
/v1/compliance/monitors/v1/compliance/score/v1/compliance/reports/v1/compliance/reports/:idRegulatory Intelligence
/v1/regulatory/subscribe/v1/regulatory/updatesTraining
/v1/training/assign/v1/training/bulk-assign/v1/training/reportWebhooks
Subscribe to real-time events from PrivacyOps. All webhook payloads are signed with HMAC-SHA256 — always verify the signature before processing.
Signature Verification
import crypto from 'crypto';
function verifyWebhook(payload: Buffer, signature: string, secret: string): boolean {
const expected = crypto
.createHmac('sha256', secret)
.update(payload)
.digest('hex');
return crypto.timingSafeEqual(
Buffer.from(signature),
Buffer.from(`sha256=${expected}`)
);
}
app.post('/webhooks/privacyops', express.raw({ type: 'application/json' }), (req, res) => {
const sig = req.headers['x-privacyops-signature'] as string;
if (!verifyWebhook(req.body, sig, process.env.WEBHOOK_SECRET!)) {
return res.status(401).json({ error: 'Invalid signature' });
}
const event = JSON.parse(req.body.toString());
// handle event...
res.json({ received: true });
});Available Events
consent.capturedUser consent recordedconsent.withdrawnUser withdrew consentdsr.receivedNew data subject request submitteddsr.deadline_approachingDSR response deadline within 7 daysdsr.overdueDSR response deadline passedbreach.detectedPotential breach flaggedbreach.confirmedBreach confirmed — 72 h clock startedbreach.resolvedIncident closedvendor.review_dueVendor risk review due within 30 daysdpia.sign_off_requiredDPIA submitted and awaiting DPO sign-offscan.completedPII discovery scan finishedretention.deletion_runScheduled deletion run completedregulatory.updateNew regulatory update in a subscribed jurisdictiontraining.overdueTraining assignment past due datecompliance.score_changeCompliance score changed by ±5 or morePlatform Integrations
PrivacyOps connects to your existing tech stack via native integrations, REST APIs, and Zapier/Make automations. All integrations are configured from the dashboard — no code required.
CRM & Sales
Cloud & Infrastructure
Data Warehouses
ITSM & Ticketing
Identity & SSO
Communication
Databases
Marketing
Don't see your tool? Use the REST API or contact [email protected] to discuss a custom integration.
Compliance Reports
Generate audit-ready reports for regulators, DPOs, and board-level stakeholders. Reports pull live data from your consent records, DSR log, RoPA, incident register, and vendor assessments.
// Generate a compliance report
const report = await privacy.compliance.generateReport({
framework: 'pdpl', // 'gdpr' | 'pdpl' | 'ccpa' | 'hipaa' | 'nca'
period: { from: '2026-01-01', to: '2026-06-30' },
format: 'pdf',
includeEvidence: true,
sections: ['consent', 'dsr', 'ropa', 'incidents', 'vendors'],
});
const url = await privacy.compliance.getDownloadUrl(report.id);
// Signed URL valid for 24 hours