Skip to content

Data subject requests

Data protection laws give your customers rights over their personal data: to see it, correct it, have it erased, restrict or object to its use, and in some countries take it away in a reusable format. Each request has a legal deadline.

Privacy → Requests is where you register those requests and answer them. For each one, SpeculaPro:

  • sets the due date from the law that applies, and reminds the person handling it;
  • checks whether answering could tip off a customer under investigation, and if so sends the request to the MLRO first, without saying why;
  • for erasure, applies the AML exemption: records that must still be kept aren’t deleted, but are erased automatically once their retention period ends;
  • for access and portability, builds an export of the person’s data that never contains monitoring data.
To You need
See requests dsr.handle or privacy.view
Register, assign, update, extend, stop the clock (UK), answer or erase dsr.handle
Download a person’s data dsr.handle and entities.view_pii (the export decrypts their data)
Review a request flagged for the MLRO reports.approve (the MLRO)
See that a due erasure is postponed, and what holds the records reports.approve (the MLRO) only. Everyone else sees an ordinary scheduled erasure

With the built-in roles, the Data protection officer handles requests, and the MLRO reviews flagged ones.

Privacy, Requests: the data subject requests list, empty, with the Register a request button and a Not yet answered filter Privacy, Requests: the data subject requests list, empty, with the Register a request button and a Not yet answered filter
Kind The person asks to How it ends
Access Receive a copy of their personal data Data provided (with the export), or Refused
Rectification Have inaccurate data corrected Rectified or Refused
Erasure Have their data deleted Decided by SpeculaPro from retention: see Erasure and the AML exemption
Restriction Limit how their data is used Restricted (AML monitoring and record keeping continue) or Refused
Objection Stop a kind of processing Objection upheld, Objection rejected or Refused
Portability Receive their data in a reusable format Data provided (with the export), or Refused

Not every law grants every right. Ghana’s Act 843 and Sénégal’s law have no portability right, for example. Laws by country lists which rights each law grants.

The due date is set when the request is registered, from when it was received and the law that applies (by default the workspace’s main jurisdiction; you can pick another law for a request).

Law Deadline SpeculaPro uses Extension
Ghana (Act 843) 40 days (access, s.35(10)); 21 days for objection (s.39(2)) and restriction None
Nigeria (NDPA) 30 days (GAID 2025, to confirm) None
Kenya (DPA 2019) 7 days for access; 14 days for rectification, erasure, restriction and objection; 30 days for portability None
Côte d’Ivoire 30 days (no deadline in the law; product default) None
Sénégal 30 days (one month for rectification and deletion, art. 69; product default for the rest) None
South Africa (POPIA, through PAIA) 30 days One extension of up to 30 days
EU (GDPR) One month Up to two further months
UK (UK GDPR) One month; you can stop the clock while you wait for proof of identity or a clarification Up to two further months
Any other country 30 days (product default) None

A month runs to the same date in the next month; when that month is shorter, to its last day (31 January gives 28 or 29 February).

A request is marked Overdue once its deadline (or its extended deadline) has passed. Three days before the deadline, the person it is assigned to (or, if nobody is, everyone with privacy.manage) receives a reminder.

Under UK GDPR Art. 12A, the time limit doesn’t run while you wait for information you reasonably need to confirm who the requester is, or to understand what they are asking for. Only requests under the UK law offer this. Other laws, the EU GDPR included, have no such rule, so the button isn’t shown there. You need dsr.handle.

  1. Open the request and select Stop the clock.
  2. Under What are you waiting for?, say what you asked the person for and when, for example proof of identity requested by email on 3 March.
  3. Select Stop the clock. The request shows Clock stopped, with the time and your reason.
  4. When the information arrives, select Restart the clock. The due date, and any extension, moves later by exactly the time the clock was stopped, and the request shows the total.

While the clock is stopped, the request is never marked overdue and sends no due-date reminder. The latest date an extension can reach moves by the same time. Every stop and restart is written to the audit log, with the reason and the dates before and after.

You need dsr.handle.

  1. Open Privacy → Requests and select Register a request.
  2. Under Customer, search by name or customer reference and choose the person the request is about.
  3. Choose What the person asks for.
  4. Check the Law. It sets the deadline and defaults to the workspace’s jurisdiction.
  5. Choose how it was Received (email, letter, branch, phone, online portal or other) and Received at: when it reached the institution. The deadline runs from here, so enter the real time, not when you are typing it in.
  6. Optionally choose an Assignee; they are notified with the deadline.
  7. Under Details, write what the person asked, in their words.
  8. Tick Identity verified only once you are sure the requester is the person, or acts for them, and say How identity was checked (for example ID card seen at the branch).
  9. Select Save. The request gets a number such as DSR-2026-000012 and its due date.
The Register a request panel: customer search, the six kinds of request (Access selected), the law (Ghana Act 843), received by, received at, assignee, details, identity verified and how identity was checked The Register a request panel: customer search, the six kinds of request (Access selected), the law (Ghana Act 843), received by, received at, assignee, details, identity verified and how identity was checked

When it is registered, SpeculaPro checks whether the request must first go to the MLRO. If so, it is flagged MLRO review, without saying why. The check is repeated for as long as the request is open. See below.

Telling a customer, directly or by implication, that they are under investigation or have been reported to the FIU is a criminal offence in every country SpeculaPro covers (Ghana’s AML Act s.38, Nigeria’s MLPPA s.19, Kenya’s POCAMLA s.8, South Africa’s FIC Act s.29, the UK’s POCA s.333A, the EU AML rules and the UEMOA uniform law). Data protection laws let you restrict a person’s rights for exactly this reason. See Tipping off and confidentiality.

So SpeculaPro:

  1. Flags the request when it is registered if the customer is the subject of an open case (about them or one of their accounts), or of a suspicious transaction or activity report that isn’t voided. A flagged request shows MLRO review. The reason is never shown, on the request, in the list, or in any message.
  2. Tells the MLRO, by the usual notifications, that request DSR-… needs their review. The message carries the request number only, never the customer or the reason.
  3. Blocks the answer until the MLRO has reviewed it: a flagged request can’t be completed, exported or erased, and can’t be moved out of review, except to record that the person withdrew it.
  4. Never exports monitoring data, for anyone: no alerts, cases, reports, real-time decisions, rule hits, risk ratings, risk designations or sanctions and PEP screening matches and clearances. Every export has the same contents and the same explanations, so an export can’t reveal by what it leaves out that something was left out for this person.
  5. Decides erasure on retention alone, so a flagged customer receives the answer any customer in their position would receive. A hold or an open case only delays the scheduled erasure, silently.

You need reports.approve.

  1. Open the request from the notification, or under Privacy → Requests (it shows MLRO review).
  2. Under MLRO review, write How may the request be answered?, for example answer as usual; the export already excludes monitoring data. Your note must not reveal any investigation or report: the person handling the request reads it.
  3. Select Record the review. The request moves to In progress, and can now be answered within your instructions.
  1. Open the request. Select Start work to show you are on it, and Assign to me if nobody is assigned.
  2. Check the identity. Select Update identity check to record how it was verified.
  3. Do what is asked, in your own systems if needed (for example correct the record in your core banking system, then send the corrected customer to SpeculaPro).
  4. For access or portability, select Download the export (zip) and send it to the person securely. See The export.
  5. Select Record the outcome, choose the Outcome, and write What the person was told. Never mention investigations, alerts, cases or reports.
    • Refused and Objection rejected need a Legal basis.
    • For Restricted, if you leave the legal basis empty, SpeculaPro records that the data is restricted for every purpose except those the law requires: AML monitoring and record keeping continue.

If the person withdraws the request, select Withdrawn by the person. It stays in the register.

Only where the law allows it (South Africa, the EU and the UK).

  1. On the request, select Extend the deadline.
  2. Choose the New deadline. It can’t be earlier than the current one or later than what the law allows, which the page shows.
  3. Give the Reason: the person must be told why, within the original deadline.

For a law with no extension, the page says This law allows no extension.

You don’t choose the outcome of an erasure request: SpeculaPro decides it from retention, so that every customer in the same position gets the same answer. Select Decide the erasure, optionally write what the person is told, and select Decide.

The customer’s situation Decision What happens Default answer to the person
The relationship is still active (status not exited) Kept under AML retention; erasure scheduled Nothing is erased now. Once the relationship ends, the date becomes the end of the customer retention period The law requires us to keep records of your identity and transactions for N years after our relationship ends. We will erase them when that period is over.
The relationship ended, but the retention period hasn’t Kept under AML retention; erasure scheduled Erased automatically on the date shown The law requires us to keep records of your identity and transactions until [date]. We will erase them then.
The period has ended, but a legal hold, an open case, an open screening match or a recent report still keeps the records Kept under AML retention; erasure scheduled; the MLRO alone also sees Erasure postponed while the hold applies Re-checked every time the worker does its housekeeping (every six hours by default), whether or not the purge is switched on, and erased at the first check after nothing keeps them. The date shown stays the day the retention period ended. That the erasure is postponed, and what holds the records, is shown to the MLRO alone: “postponed” with no legal hold in sight would mean a case or a report about the person, so everyone else sees an ordinary scheduled erasure whatever holds it (legal holds stay listed under Retention & legal holds) The retention period for your records has ended and your personal data is scheduled for erasure.
The period has ended and nothing keeps them Erased or Pseudonymised (per the customer category’s action) Done now: the customer, their accounts, transactions, real-time decisions and account events. Transactions covered by a report stay, and so do the decisions about them Your personal data has been erased.
SpeculaPro holds no personal data about them any more Erased Nothing to do We hold no personal data about you any more.

The decision records the legal basis: the AML laws and the erasure exemptions of each data protection law that applies (for example Act 1044 s.32(3); Act 843 s.24(1)(a), s.61 in Ghana, or GDPR Art. 17(3)(b) in the EU). The request is completed with the decision; the worker carries out the scheduled erasure later and records it (privacy_request.erased).

If the AI assistant advised on alerts about the person, those reviews follow their alerts. They are not in the export, like the alerts themselves; nor are its summaries of the person’s cases.

When an erasure request is carried out, by your decision or later by the worker when its date arrives, the reviews of the person’s alerts, and of alerts about their accounts, are deleted: the advice, what was sent to the model and what came back. A review holds no name (the person appears as Customer A), but the stored request held the times and amounts of the transactions being erased. The alerts stay, without advice. The assistant’s drafts of the narratives of reports made from the person’s cases are deleted in the same step, where a report is still a draft and has any (drafts are deleted anyway when a report leaves draft; the report itself is kept for as long as the law requires). The assistant’s summaries of the person’s cases, and of cases about their accounts, are deleted in the same step, with what was sent and what came back; the cases stay. Only an erasure on request does this; a customer removed by the retention purge alone keeps their alerts’ reviews and their cases’ summaries until the alerts and cases are deleted.

Two things remain. The audit log’s ai.alert_review and ai.case_summary entries keep the model and the token counts (and a review’s recommendation), with no text. And what was already sent to the model’s provider is outside SpeculaPro: whether and how it can be erased there depends on the agreement with the provider. Take both into account in what you tell the person. This is not legal advice; confirm with counsel.

For access and portability requests, Download the export (zip) builds a file named DSR-…-export.zip containing:

File Contents
README.txt What each file holds, and a statement that records the law requires to be kept confidential aren’t included
data.json Everything below in one machine-readable file, with the request number, the data controller and when it was generated
identity.csv Customer reference, type, name, date of birth, nationality, country, occupation, ID document type and number, phone, email, KYC level, status, and when they became a customer
accounts.csv Account references, types, providers, identifiers, currencies, status, and opening and closing dates
transactions.csv Date, reference, direction, type, channel, status, amount (in the currency’s minor unit), currency, countries, and the payment reference and description
account_events.csv Date, reference, type, channel, result and IP address

Dates are in UTC. The export holds every row, however long the customer’s history: nothing is cut off. A payment that monitoring stopped appears with the status declined, as the customer saw it; README.txt explains that status in the same words for every customer, and never says why a payment was declined.

It never contains alerts, cases, reports, real-time decisions, rule hits, risk ratings, risk designations or screening matches and clearances, for any customer.

Downloading an export decrypts personal data, so it needs entities.view_pii as well as dsr.handle, and is written to the audit log twice: as a view of the customer’s personal data (customer.view_pii) and as the export (privacy_request.export). Send the file to the person over a secure channel, and delete your copy afterwards.

Action Audit log entry
Request registered privacy_request.create, with the number, kind, law, customer and whether it was flagged
Assigned, identity checked, extended or withdrawn privacy_request.update
Clock stopped or restarted (UK) privacy_request.clock_pause, with the reason; privacy_request.clock_resume, with how long it was stopped and the due dates before and after
Flagged for the MLRO after it was registered privacy_request.tipping_off_flagged, recorded as the system, without the reason
MLRO review privacy_request.mlro_review, with the note
Outcome recorded privacy_request.complete, with the decision and legal basis
Erasure decided privacy_request.erasure_decision, with the decision, legal basis, date, whether it is postponed by a hold, and rows affected
A due erasure became postponed privacy_request.erasure_postponed, recorded as the system
A postponed erasure stopped being postponed without being carried out privacy_request.erasure_hold_ended, recorded as the system
A scheduled erasure’s date moved privacy_request.erasure_rescheduled, recorded as the system
Scheduled erasure carried out privacy_request.erased, recorded as the system
Export downloaded customer.view_pii and privacy_request.export, with how many accounts, transactions and account events it holds and its size