Skip to main content
Was this helpful?

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

MethodPathPurposeRequest or queryAuthSource
GET/api/compliance/me/privacy/accessGenerate the privacy access report.NoneJWT or user API keycompliance/compliance.controller.ts
GET/api/compliance/me/privacy/exportExport the user's personal data.NoneJWT or user API keycompliance/compliance.controller.ts
POST/api/compliance/me/privacy/requestsCreate a data-subject request.Body: requestType,reason,confirmEmailJWT or user API keycompliance/compliance.controller.ts
GET/api/compliance/me/privacy/requestsList the user's data-subject requests.Query: statuses,requestTypes,search,offset,limitJWT or user API keycompliance/compliance.controller.ts
GET/api/compliance/me/privacy/consentsList current consent decisions.NoneJWT or user API keycompliance/compliance.controller.ts
PUT/api/compliance/me/privacy/consents/:consentTypeUpsert one consent decision.Path: consentType, body: decision,policyVersion,source,metadataJWT or user API keycompliance/compliance.controller.ts
POST/api/compliance/me/privacy/policy-acceptanceAccept a privacy-policy version.Body: versionJWT or user API keycompliance/compliance.controller.ts

Request Shapes

Data-subject requests

CreateDataSubjectRequestDto

  • requestType: required enum access|export|delete
  • reason: optional string, max 1000 chars
  • confirmEmail: optional string, lowercased, max 254 chars

DataSubjectRequestQueryDto

  • statuses: optional string array, comma-separated values supported
  • requestTypes: optional string array, comma-separated values supported
  • search: optional string, max 120 chars
  • offset: optional int >= 0
  • limit: optional int 1..500

Consents

UpsertConsentDto

  • decision: required accepted|revoked
  • policyVersion: required string, max 64 chars
  • source: optional string, max 64 chars
  • metadata: optional object

Current consent types exposed in code:

  • privacy_policy
  • terms_of_service
  • marketing_email
  • data_processing
  • cookie_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"
}'
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 policyVersion values everywhere instead of modeling consent as a plain boolean.
  • Pair compliance actions with Personal Logs API in privacy-center UIs.
  • Require an explicit confirmation step before sending requestType=delete from a client.
  • Keep confirmEmail aligned with the authenticated user's current email when the UI asks for reconfirmation.