Data deletion confirmation — attestations sub-resource
Every consent gains an append-only attestations sub-resource. Once a consent reaches a terminal status — Revoked or Expired — the TPP reviews the data it holds under that consent and POSTs an Attestation Event confirming what it did with it. Rejected consents are out of scope: no data was ever shared under them.
The sub-resource is added to all three consent types, each scoped to its own API family:
POST /account-access-consents/{ConsentId}/attestations (scope accounts), POST /payment-consents/{ConsentId}/attestations (scope payments), and POST /insurance-consents/{ConsentId}/attestations (scope insurance).
A payment consent is not empty for this purpose — it carries debtor and creditor details, amounts, references, and any account data the TPP retrieved to set the payment up, so it falls under the same obligation as a data sharing consent.
The event body carries an envelope — AttestationType (today only DataRetentionDeletion), AttestationStatusAppliedDateTime, DataAccessCeasedDateTime, and ConsentRevocationDateTime where the customer revoked at the TPP — plus a DataActions array with one entry per category of data held. Each entry declares whether that category was Deleted, Retained, Anonymised, or ArchivedRestricted, and carries the date the attestation for that category was made; anything kept also requires a retention reason, a retained-until date, and an access restriction.
The POST is not a JSON body: the request is a signed JWT sent as application/jwt, carrying the Attestation in its message claim, and the 201 response is a signed JWT in return. The receipt inside it gives AttestationId, AttestationReceivedDateTime and RegulatoryDeadlineMetIndicator, plus a full copy of the Attestation submitted — repeating it puts the complete record inside the signed message. RegulatoryDeadlineMetIndicator reports whether the event arrived before the regulatory deadline for the attestation type; for DataRetentionDeletion that is 45 days from the consent becoming terminal, a value the API Hub applies rather than one the specification carries. A late event is still recorded, not rejected.
The GET returns every recorded event as unsigned JSON, paginated, each carrying its copy of the submitted Attestation. Where a TPP has posted more than one, only the last successfully recorded event is reported on; LastSubmitted=true retrieves just that one.
The sub-resource is append-only and stateless. Each POST records a new immutable event, the API Hub applies no de-duplication, and there is no correction endpoint — a restatement is simply another event. AttestationType is the extension point: a future obligation to attest to something else against a consent becomes a new type rather than a new API.
The full specification — field tables, enum values, validation rules, and worked examples — is on the Data Deletion Confirmation page linked below.
