Data Protection Policy

Last Updated: May 2026

This policy describes how Shakewell Wallet handles personal data that we process on behalf of merchants who connect their commerce platform (Shopify, WooCommerce, and others) to our wallet pass service. It covers the protected customer data fields we access, the controls we apply to them, and the rights customers retain.

Purpose & Minimisation

We process the minimum personal data required to deliver wallet passes and credit loyalty rewards. Every field we read from a connected commerce platform is consumed by a specific, documented purpose in our system. We do not collect speculative data for unrelated analytics or for resale.

What we tell merchants

Each connected store sees an itemised list of the personal data fields we access, the reasons for access, and the integrations that consume them — surfaced both at OAuth consent time and in the integration detail page of their wallet admin.

Data We Access

Customer name

Used to personalise wallet pass content and the welcome page after a customer enrols.

Customer email

The primary identifier we use to match a Shopify (or other platform) customer to a wallet member. Email is also used for transactional notifications when a customer has pending loyalty credits.

Customer phone

Optional secondary identifier and a fallback delivery channel when configured. Stored only when the merchant's signup form asks for it.

Customer address

Optional, used only when a merchant's signup form requests it for shipping or geographic targeting of campaigns. Address is never the primary identifier.

Order events

We receive order-level webhook events (fulfilled, cancelled, refunded) to credit and reverse loyalty points. We do not store full line-item details beyond what is required for the loyalty calculation and audit trail.

Storage & Encryption

Encryption at rest

All databases are AWS RDS instances with storage-level encryption enabled. Sensitive fields (OAuth access tokens, webhook signing secrets, third-party API keys) are additionally encrypted at the application layer before being written to disk, so a database snapshot alone is not enough to recover them.

Encryption in transit

All public traffic is TLS-only — HTTPS for the wallet admin, the wallet API, and the customer signup forms; HTTPS for every webhook we receive; HTTPS for every outbound call we make to commerce platforms. We reject non-TLS connections at the edge.

Backups

Database backups are taken on a schedule by AWS RDS. Backup snapshots inherit the same storage-level encryption as the live database. Backups are retained per a fixed schedule and are never shared outside the production AWS account.

Test and production isolation

Production data does not flow into the staging or development environments. Each environment has its own database, its own credentials, and its own Shopify app registration. Engineers debugging an issue in staging see synthetic test fixtures, not real merchant customer records.

Staff Access Controls

Access to systems that hold customer data is limited to the Shakewell engineering team, and within that team is granted on a role basis rather than a per-individual basis. Production database access requires a separate credential set from staging and is logged centrally.

Password requirements

Staff accounts on Shakewell-managed services require strong passwords (minimum length, complexity, no reuse against known-breached credentials) and where supported by the provider, multi-factor authentication is enforced. Shared credentials are not used.

Access logging

Every read or write against the wallet API by an authenticated admin user is recorded with the actor, the resource, and the timestamp. The audit log is retained for a fixed period and reviewed periodically.

Data Loss Prevention

Our data loss prevention strategy is layered and aims to ensure that customer data cannot be exfiltrated, lost, or accidentally exposed by any single failure.

Network egress

Production database hosts are not directly reachable from the public internet. All outbound integrations call known commerce platform endpoints over TLS; arbitrary outbound traffic from production worker hosts is not permitted in normal operation.

Credential isolation

OAuth access tokens, webhook signing secrets, and third-party API keys are stored encrypted at rest and are never written to application logs. Stack traces and error reports are filtered against a deny-list of sensitive payload patterns before being persisted.

Public response shape

Production API responses never include stack traces, file paths, or framework internals. Error responses surface only a generic message and an error code. The recent fix tracking ticket 86d33m9e7 hardened this gate.

Schema-level minimisation

Tables that hold customer data have explicit casts and only the columns required for the documented purpose. Sensitive columns use Laravel's encrypted cast so the at-rest ciphertext is what touches disk.

Backup posture

Backups are encrypted, scoped to the production AWS account, and never restored into a non-production environment. Restoration is treated as a recovery event, not a routine operation.

Incident Response

We maintain a documented incident response procedure that engineers follow when a suspected security event is identified. The procedure prioritises containment, notification, and learning.

Detection

Authentication failures, unusual API patterns, and unexpected error spikes are surfaced through application logs and platform monitoring. An on-call engineer is responsible for reviewing escalations.

Containment

On confirmed events the first action is to contain — rotate any potentially compromised credentials, disable affected access tokens, and isolate the suspect component from production traffic. Containment runs before broader investigation.

Merchant notification

If customer data of a connected merchant is affected, we notify that merchant as soon as we have a confirmed scope assessment, with the facts we know at the time and a commitment to follow up as the investigation completes.

Post-incident

Every incident is recorded with a written timeline, contributing causes, and at least one durable action item assigned to a named owner. Recurring root causes drive prioritised engineering work.

Retention & Deletion

We retain personal data only as long as it is needed to deliver the wallet pass service to the connected merchant. We do not retain customer data after the merchant disconnects beyond what is needed for audit, billing, or legal obligations.

GDPR webhooks

We implement Shopify's three mandatory privacy webhooks (customers/redact, customers/data_request, shop/redact) and the equivalent endpoints on other connected platforms. When a redact request is received, customer records and any derived data are deleted within the time bound specified by the platform.

Disconnect

When a merchant disconnects their store, we stop receiving and processing new events from that store immediately. The audit trail of past events is retained for the period specified by the merchant's agreement.

Customer Rights

Individual customers should direct access, correction, and deletion requests to the merchant whose store they shop with. Shakewell acts as a data processor for that merchant. We support every connected merchant in answering customer requests within the timeframes their regulator imposes.

Audits & Certifications

Shakewell Wallet does not currently hold a formal third-party security certification (SOC 2, ISO 27001). Our controls are documented in this policy, and we are willing to share specific architectural detail with any merchant who asks under a mutual confidentiality agreement.

Contact

Questions about this policy or about how we handle a specific merchant's customer data can be sent to hello@shakewell.com.