Compliance API
Privacy and Compliance
Export personal data, create data-subject requests, and manage consent state
These routes back the user-facing privacy center. They are scoped to the authenticated user and intentionally exclude the admin compliance surface.
JWT or user API keyGDPR-style access and exportConsent statePolicy versioning
Source
- Controller:
backend-nestjs/src/compliance/compliance.controller.ts - DTOs:
backend-nestjs/src/compliance/dto/compliance.dto.ts
Authentication and Permissions
- All routes on this page require authentication.
- Every route is scoped to the authenticated user.
- Admin compliance routes under
/api/admin/compliance/*are explicitly out of scope for this reference.
Endpoint Reference
| Method | Path | Purpose | Request or query | Auth | Source |
|---|---|---|---|---|---|
GET | /api/compliance/me/privacy/access | Generate the privacy access report. | None | JWT or user API key | compliance/compliance.controller.ts |
GET | /api/compliance/me/privacy/export | Export the user's personal data. | None | JWT or user API key | compliance/compliance.controller.ts |
POST | /api/compliance/me/privacy/requests | Create a data-subject request. | Body: requestType,reason,confirmEmail | JWT or user API key | compliance/compliance.controller.ts |
GET | /api/compliance/me/privacy/requests | List the user's data-subject requests. | Query: statuses,requestTypes,search,offset,limit | JWT or user API key | compliance/compliance.controller.ts |
GET | /api/compliance/me/privacy/consents | List current consent decisions. | None | JWT or user API key | compliance/compliance.controller.ts |
PUT | /api/compliance/me/privacy/consents/:consentType | Upsert one consent decision. | Path: consentType, body: decision,policyVersion,source,metadata | JWT or user API key | compliance/compliance.controller.ts |
POST | /api/compliance/me/privacy/policy-acceptance | Accept a privacy-policy version. | Body: version | JWT or user API key | compliance/compliance.controller.ts |
Request Shapes
Data-subject requests
CreateDataSubjectRequestDto
requestType: required enumaccess|export|deletereason: optional string, max 1000 charsconfirmEmail: optional string, lowercased, max 254 chars
DataSubjectRequestQueryDto
statuses: optional string array, comma-separated values supportedrequestTypes: optional string array, comma-separated values supportedsearch: optional string, max 120 charsoffset: optional int>= 0limit: optional int1..500
Consents
UpsertConsentDto
decision: requiredaccepted|revokedpolicyVersion: required string, max 64 charssource: optional string, max 64 charsmetadata: optional object
Current consent types exposed in code:
privacy_policyterms_of_servicemarketing_emaildata_processingcookie_analytics
Policy acceptance
AcceptPrivacyPolicyDto.version: required string, max 64 chars
Example Calls
Create an export request
curl -X POST "$PRIMECAL_API/api/compliance/me/privacy/requests" \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{
"requestType": "export",
"reason": "Personal archive"
}'
Update a consent decision
curl -X PUT "$PRIMECAL_API/api/compliance/me/privacy/consents/marketing_email" \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{
"decision": "revoked",
"policyVersion": "2026-03",
"source": "privacy-center"
}'
Accept the current policy version
curl -X POST "$PRIMECAL_API/api/compliance/me/privacy/policy-acceptance" \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{
"version": "2026-03"
}'
Response and Behavior Notes
- Access and export routes generate user-scoped privacy reports.
- Consent changes record additional metadata such as source, IP, and user agent in the service layer.
- Data-subject request listing returns only the current user's own requests.
Best Practices
- Use explicit
policyVersionvalues everywhere instead of modeling consent as a plain boolean. - Pair compliance actions with
Personal Logs APIin privacy-center UIs. - Require an explicit confirmation step before sending
requestType=deletefrom a client. - Keep
confirmEmailaligned with the authenticated user's current email when the UI asks for reconfirmation.