Skip to content

Data Privacy Policy

Document ID: DPP-001 Version: 1.0 Classification: Internal Effective Date: January 2026 Next Review: July 2026 Owner: Keshless Compliance Team


1.1 Purpose

This Data Privacy Policy establishes how Keshless collects, processes, stores, and protects personal information. It ensures compliance with applicable data protection regulations and demonstrates our commitment to safeguarding customer privacy.

RegulationApplicabilityKey Requirements
POPIA (South Africa)Cross-border transactionsLawful processing, data subject rights, breach notification
GDPR (European Union)EU data subjectsConsent, data minimization, right to erasure
Eswatini Data ProtectionLocal operationsPersonal information protection
FATF RecommendationsAML/CFTCustomer due diligence, record keeping

1.3 Scope

This policy applies to all personal data processed by Keshless, including:

  • User registration and profile data
  • KYC (Know Your Customer) documentation
  • Transaction records
  • Vendor business information
  • Employee and contractor data
  • Support and communication records

1.4 Data Controller

Keshless (Pty) Ltd Eswatini Email: privacy@keshless.app


2. Data Classification

2.1 Classification Levels

LevelDescriptionExamplesAccess
RestrictedHighly sensitive personal dataID numbers, passwords, biometricsNeed-to-know, encrypted
ConfidentialSensitive business/personal dataTransactions, KYC statusRole-based access
InternalGeneral business dataAnalytics, configurationsInternal employees
PublicNon-sensitive informationFAQs, marketing contentUnrestricted

2.2 Special Categories

Data requiring enhanced protection:

  • Government-issued identification numbers
  • Biometric data (selfies for KYC)
  • Financial account information
  • Location data
  • Health information (if collected)

3. Data Inventory (PII Mapping)

3.1 User Personal Data

FieldData TypeClassificationPurposeLegal Basis
firstName, lastNameNameConfidentialAccount identificationContract
surname, namesFull nameConfidentialKYC verificationLegal obligation
phoneNumberContactConfidentialAuthentication, notificationsContract
emailContactConfidentialCommunicationContract
personalIdNumberGovernment IDRestrictedKYC verificationLegal obligation
dateOfBirthDemographicsRestrictedAge verification, KYCLegal obligation
sex, genderDemographicsConfidentialID verificationLegal obligation
chiefCodeLocationConfidentialKYC (Eswatini traditional authority)Legal obligation
sourceOfFundsFinancialConfidentialAML complianceLegal obligation
occupationEmploymentConfidentialRisk assessmentLegitimate interest
expectedMonthlySalaryFinancialConfidentialTransaction monitoringLegitimate interest
passwordCredentialRestrictedAuthenticationContract
walletPinCredentialRestrictedTransaction authorizationContract
profilePhotoImageConfidentialProfile displayConsent
referralCodeIdentifierInternalMarketingConsent
preferencesSettingsInternalUser experienceContract

3.2 KYC Documents

FieldData TypeStorageRetentionPurpose
idFrontImageDocument scanGCS: kyc/*5 years post-closureIdentity verification
idBackImageDocument scanGCS: kyc/*5 years post-closureIdentity verification
selfieImageBiometricGCS: selfies/*5 years post-closureLiveness verification
ocrExtractedDataExtracted textPostgreSQL5 years post-closureVerification audit trail

3.3 Financial Data

FieldData TypeClassificationPurpose
walletBalanceCurrencyRestrictedAccount balance
WalletTransaction.*Transaction recordsConfidentialFinancial history
JournalEntry.*Accounting entriesConfidentialDouble-entry ledger
LedgerEntry.*Detailed postingsConfidentialAudit trail

3.4 Vendor Business Data

FieldData TypeClassificationPurpose
businessNameBusiness identityConfidentialAccount identification
businessRegistrationGovernment IDRestrictedBusiness verification
taxNumberGovernment IDRestrictedTax compliance
primaryContactContactConfidentialCommunication
address, locationLocationConfidentialService delivery
leaseAgreementDocumentRestrictedBusiness verification
directorIdFront/BackDocument scanRestrictedDirector verification
formJ, formCLegal documentsRestrictedCompany registration

3.5 AML/Compliance Data

FieldData TypePurposeRetention
currentRiskScoreRisk metricAML monitoring7 years
riskRatingRisk categoryAML monitoring7 years
isPEP, pepDetailsPEP statusEnhanced due diligence7 years
isSanctioned, sanctionsDetailsSanctions statusCompliance7 years
CustomerRiskProfile.*Risk assessmentAML monitoring7 years
Alert.*Compliance alertsInvestigation7 years
SAR.*Suspicious activity reportsRegulatory reporting7 years

4. Data Collection and Processing

4.1 Collection Methods

MethodData CollectedPurpose
User RegistrationPhone, name, passwordAccount creation
KYC SubmissionID documents, selfieIdentity verification
Profile UpdatesPersonal detailsAccount management
TransactionsPayment details, amountsFinancial services
API IntegrationsBusiness dataVendor services
Support RequestsCommunication contentCustomer support

4.2 Processing Activities

ActivityPurposeLegal BasisData Subjects
Account ManagementService deliveryContractUsers, Vendors
KYC VerificationRegulatory complianceLegal obligationUsers, Vendors
AML ScreeningRegulatory complianceLegal obligationUsers, Vendors
Transaction ProcessingService deliveryContractUsers, Vendors
Fraud DetectionSecurityLegitimate interestUsers, Vendors
MarketingBusiness developmentConsentOpted-in users
AnalyticsService improvementLegitimate interestAll users (anonymized)

4.3 KYC/AML Processing

Identity Verification Flow:

1. User submits ID documents


2. Documents stored in GCS (keshless-documents bucket)


3. Gemini 2.5 Flash - OCR extraction of ID details (primary)
   └─ AWS Textract - OCR extraction (fallback)


4. Sanctions Screening - UN Security Council list


5. PEP Screening - Politically Exposed Persons database


6. Risk Scoring - 0-100 score calculated


7. Manual Review (if required) - Human verification


8. Verification Decision - VERIFIED, REJECTED, NEEDS_REVIEW

5. Data Storage

5.1 Storage Locations

Data TypeStorage SystemLocationEncryption
User/Vendor recordsPostgreSQL (Cloud SQL)europe-west1At rest (AES-256)
KYC documentsGCP Cloud StorageGlobal edgeAt rest (encrypted)
Audit logsPostgreSQLeurope-west1At rest + hash chain
BackupsGCP Cloud Storagekeshless-backupsAES-256-GCM (secrets)
Application logsCloud LoggingGCPAt rest

5.2 GCS Storage Structure

keshless-documents/
├── kyc/                    # User KYC documents
│   ├── {userId}-front.jpg  # ID front image
│   └── {userId}-back.jpg   # ID back image
├── selfies/                # User verification selfies
│   └── {userId}-selfie.jpg
├── vendor-kyc/             # Vendor verification documents
│   ├── {vendorId}-lease.pdf
│   ├── {vendorId}-director-front.jpg
│   └── {vendorId}-formj.pdf
└── vendor-media/           # Vendor logos, media
    └── {vendorId}-logo.png

5.3 Database Security

PostgreSQL (Cloud SQL):

  • Instance: eneza-40ab5:europe-west1:eneza-postgres
  • SSL/TLS required for connections
  • Authorized networks only
  • Automated backups (point-in-time recovery)
  • Private IP (VPC connector)

6. Data Retention

6.1 Retention Schedule

Data CategoryRetention PeriodBasis
Transaction Records5+ years from transactionFinancial regulations
KYC Documents5 years post-account closureAML regulations
Audit Logs7 yearsRegulatory compliance
SAR Records7 yearsAML regulations
OTP Codes5 minutesSecurity (auto-deleted)
Failed Login Attempts90 daysSecurity monitoring
Application Logs90 daysOperational
Inactive Accounts3 years after last activityBusiness decision

6.2 Automated Retention Enforcement

OTP Auto-Expiry:

typescript
// OTPs automatically expire after 5 minutes
model OTP {
  expiresAt DateTime
  // Cleanup job removes expired OTPs
}

Backup Cleanup:

  • Daily backups: 2 years retention
  • Monthly backups: 5 years retention
  • Automated cleanup job runs weekly (Mondays 5:00 AM UTC)

6.3 Retention Exceptions

Data may be retained longer than standard periods when:

  • Required by ongoing legal proceedings
  • Subject to regulatory investigation
  • Needed for dispute resolution
  • Part of active fraud investigation

7. Data Subject Rights

7.1 Rights Overview

RightDescriptionImplementation
AccessView personal data heldData export via dashboard/API
RectificationCorrect inaccurate dataProfile editing, support request
ErasureDelete personal dataAccount deletion workflow
PortabilityReceive data in machine-readable formatJSON export
RestrictionLimit processingAccount suspension option
ObjectObject to processingMarketing opt-out

7.2 Right to Access

Request Process:

  1. User submits access request via app or email
  2. Identity verification (OTP)
  3. Data compiled within 30 days
  4. Provided in readable format (PDF/JSON)

Data Included:

  • Profile information
  • Transaction history
  • KYC status
  • Risk profile (redacted)
  • Consent records

7.3 Right to Erasure (Account Deletion)

Deletion Workflow (Implemented in Schema):

typescript
model User {
  deletionRequested    Boolean   @default(false)
  deletionRequestedAt  DateTime?
  deletionScheduledFor DateTime?
  deletedById          String?
}

Process:

  1. User requests account deletion
  2. deletionRequested set to true
  3. deletionRequestedAt recorded
  4. deletionScheduledFor set to 30 days future
  5. User notified and can cancel within 30 days
  6. After 30 days, data anonymized/deleted

Exceptions to Erasure:

  • Active regulatory investigation
  • Pending transactions
  • Legal hold requirement
  • Outstanding balance

7.4 Response Timeframes

Request TypeResponse Deadline
Access Request30 days
Rectification30 days
Erasure30 days (+ 30 day cooling-off)
Portability30 days
Objection30 days

8. Third-Party Data Processors

8.1 Sub-Processors

ProcessorServiceData ProcessedLocationDPA Status
Google Cloud PlatformInfrastructureAll application dataBelgium (europe-west1)Standard contractual clauses
GCP Cloud StorageDocument StorageKYC documents, selfies, vendor documentseurope-west1Standard contractual clauses
Google AI (Gemini)OCR verification (primary)ID documentsEU regionGoogle Cloud DPA
AWS TextractOCR verification (fallback)ID documentsEU regionAWS DPA
TwilioSMS messagingPhone numbers, OTPsUSTwilio DPA
ClickatellSMS fallbackPhone numbers, OTPsSouth AfricaStandard agreement

8.2 Third-Party Security Requirements

All processors must:

  • Sign Data Processing Agreement (DPA)
  • Demonstrate compliance with applicable regulations
  • Implement appropriate security measures
  • Report data breaches within 24 hours
  • Allow audit rights

8.3 Cross-Border Transfers

TransferMechanismSafeguards
EU to US (Twilio)Standard Contractual ClausesDPA, encryption
EU to South AfricaAdequate protectionPOPIA compliance
Within EUNo additional safeguardsGDPR applies

9. Data Breach Notification

9.1 Breach Definition

A personal data breach is a security incident leading to:

  • Accidental or unlawful destruction
  • Loss
  • Alteration
  • Unauthorized disclosure
  • Unauthorized access

9.2 Notification Requirements

AudienceTimeframeTrigger
Central Bank of EswatiniWithin 72 hoursAny breach affecting customer data
Financial Intelligence UnitWithin 72 hoursBreach involving AML data
Affected Data SubjectsWithout undue delayHigh risk to rights and freedoms
Supervisory AuthorityWithin 72 hoursPOPIA/GDPR requirement

9.3 Breach Response

See Incident Response Plan for detailed procedures.

Summary:

  1. Contain - Stop the breach, preserve evidence
  2. Assess - Determine scope and impact
  3. Notify - Regulators (72h), affected persons
  4. Document - Full incident record
  5. Remediate - Fix vulnerabilities, prevent recurrence

10. Privacy by Design

10.1 Design Principles

PrincipleImplementation
Data MinimizationCollect only necessary data for stated purposes
Purpose LimitationUse data only for specified purposes
Storage LimitationDelete data when no longer needed
AccuracyKeep data accurate and up-to-date
SecurityAppropriate technical measures
AccountabilityDocument and demonstrate compliance

10.2 Technical Measures

MeasureDescription
Encryption at restAES-256 for databases and storage
Encryption in transitTLS 1.3 for all connections
PseudonymizationUser IDs instead of direct identifiers
Access controlsRole-based, need-to-know
Audit loggingAll access and changes logged
Data maskingPII masked in logs and displays

10.3 Privacy Impact Assessment

New features involving personal data require:

  1. Data flow mapping
  2. Risk assessment
  3. Mitigation measures
  4. Approval from Compliance Officer

Processing ActivityConsent RequiredWithdrawal Method
Account creationYes (Terms of Service)Account deletion
KYC verificationYes (explicit)N/A (regulatory requirement)
Transaction processingYes (implied by use)Service termination
Marketing communicationsYes (explicit opt-in)In-app toggle
AnalyticsNo (legitimate interest)Opt-out available
AML monitoringNo (legal obligation)N/A

Consent is recorded with:

  • Timestamp
  • Version of terms/privacy policy accepted
  • Method of consent (checkbox, signature)
  • IP address at time of consent

12. Employee Data Protection Responsibilities

12.1 Training Requirements

All employees handling personal data must complete:

  • Data protection awareness training (annually)
  • Role-specific privacy training
  • Incident response training

12.2 Access Principles

  • Need-to-Know: Access only data necessary for role
  • Least Privilege: Minimum permissions required
  • Segregation of Duties: Critical functions separated
  • Regular Review: Quarterly access audits

12.3 Prohibited Activities

Employees must not:

  • Access data without legitimate business purpose
  • Share personal data without authorization
  • Store personal data on personal devices
  • Transfer data to unauthorized systems
  • Discuss personal data in public areas

Appendix A: Demonstration Procedure

A.1 Data Privacy Demonstration

For regulatory presentations, demonstrate:

1. Data Encryption:

bash
# Show password hashing (bcrypt)
# In database: password = "$2b$12$..." (bcrypt hash, not plaintext)

# Show PIN hashing
# In database: walletPin = "$2b$12$..." (bcrypt hash)

2. Account Deletion Flow:

bash
# Request deletion
curl -X POST https://keshless-api-dev.../api/users/request-deletion \
  -H "Authorization: Bearer <token>" \
  -H "Content-Type: application/json"

# Response includes:
{
  "deletionRequested": true,
  "deletionScheduledFor": "2026-02-22T00:00:00.000Z",
  "message": "Deletion scheduled. Cancel within 30 days if needed."
}

3. OTP Auto-Expiry:

bash
# Create OTP
curl -X POST .../api/auth/request-otp -d '{"phoneNumber": "+26878422613"}'

# Wait 5+ minutes, then try to verify
curl -X POST .../api/auth/verify-otp -d '{"phoneNumber": "+26878422613", "otp": "123456"}'

# Response: 400 - OTP expired

4. Audit Trail:

  • Navigate to Admin Dashboard
  • View audit logs showing all data access
  • Demonstrate hash chain integrity

A.2 Dashboard Demo

Navigate to /compliance-demo in the admin dashboard to:

  1. View data encryption examples
  2. Test account deletion workflow
  3. Observe OTP auto-expiry
  4. Review immutable audit trail with hash verification

Appendix B: Data Flow Diagrams

B.1 User Registration Flow

User App                  API                    Database
   │                       │                        │
   │ Register request      │                        │
   │──────────────────────>│                        │
   │                       │ Hash password          │
   │                       │ (bcrypt 12 rounds)     │
   │                       │                        │
   │                       │ Store user             │
   │                       │───────────────────────>│
   │                       │                        │
   │                       │ Generate OTP           │
   │                       │───────────────────────>│
   │                       │                        │
   │                       │ Send OTP               │
   │                       │──────────> Notification Service
   │                       │                        │
   │ OTP sent              │                        │
   │<──────────────────────│                        │

B.2 KYC Document Flow

User App          API              Gemini AI         GCS Storage
   │               │                │                  │
   │ Upload ID     │                │                  │
   │──────────────>│                │                  │
   │               │ Store document │                  │
   │               │────────────────────────────────-->│
   │               │                │                  │
   │               │ Generate signed URL               │
   │               │<──────────────────────────────────│
   │               │                │                  │
   │               │ OCR extraction │                  │
   │               │───────────────>│ (Gemini 2.5)    │
   │               │                │                  │
   │               │ Sanctions check│                  │
   │               │ (Internal)     │                  │
   │               │                │                  │
   │ Result        │                │                  │
   │<──────────────│                │                  │

Document Control

VersionDateAuthorChanges
1.0January 2026Compliance TeamInitial release

Approval:

RoleNameSignatureDate
Compliance Officer_______________________________________
CTO_______________________________________
CEO_______________________________________

Internal use only - Keshless Payment Platform