GDPR Data Anonymisation
In compliance with GDPR's "right to be forgotten", Dixa API allows for anonymisation of messages, conversations or users so that any personally identifiable information is removed out of the Dixa platform, without impacting metadata on which you may rely on for analytics or WFM purposes.
There's 3 anonymisation types currently implemented, which cover each other in a "waterfall" like structure
- User anonymisation , which also includes the next two types
- Conversation anonymisation , which also includes the next type
- Message anonymisation
When anonymising your user, all of that user's conversations and messages are also anonymised. Similary, when anonymising a conversation (but not the user), all of the messages in that conversation are anonymised.
To keep it simple, we'll refer to user, conversation or message as "entity" from here on.
How it works
You can request any of the beforementioned entities to be anonymised. As a safeguard, we've added checks for open conversations so that you don't accidentally anonymise entities which are still being handled by your agents.
You can override this behaviour by adding ?force=true
to the request URI, which will skip the check and anonymise the entity regardless of status.
Anonymisation requests are queued and are processed on a first come, first served bases. Therefore, when you request an entity to be anonymised, we will give you a requestId
, which can be used to later check the status of the anonymisation.
In general, this queue is relatively short and requests are processed almost right away, but it can take up to 24 hours when a lot of entities are requested to be anonymised in a short time span.
Getting the correct identifiers
When trying to anonymise an entity, we expect you to pass us which entity you'd like to anonymise. In order to make sure we don't log any personal identifiable information (PII) when making these requests, we expect you to identify which entity you'd like to anonymise using Dixa's internal identifiers. You can get these via our APIs (they will always be under the id
attribute) or, in case of users and conversations, inside the Dixa interface.
- For conversations, the ID is always an integer
-
For users and messages, the ID will be a string (example,
7161f740-e8bf-44ab-8d3f-8ab00241c9c6
)
If you want to find the userId
based on email address or phone number, you can use the GET /v1/endusers
endpoint with ?email=
or ?phone=
as query parameters, followed by the email address or phone number of your end user.
If you want to find the messageId
, you can use the Message Export API or GET /v1/conversations/{conversationId}/messages
endpoint, where conversationId
is the integer identifiying the conversation in which the message resides.
Example requests
Here are some example CURL commands you can use. Make sure to change <API token>
with a Dixa API token
-
If you'd like to anonymise user
7161f740-e8bf-44ab-8d3f-8ab00241c9c6
, you'd have to make the following request:curl -I -X PATCH -H "Authorization: Bearer <API token>" "https://dev.dixa.io/v1/endusers/7161f740-e8bf-44ab-8d3f-8ab00241c9c6/anonymize"
Please note, we currently only support anonymising end users, if the user is of the type "agent", you will first have to downgrade the agent to end user. You can do so with the Agents resource in our API.
-
If you'd like to anonymise conversation
123
, even when it's open , you'd have to make the following request:curl -I -X PATCH -H "Authorization: Bearer <API token>" "https://dev.dixa.io/v1/conversations/123/anonymize?force=true"
The ?force=true
parameter forcefully closes the conversation, and also works for the /endusers
endpoint from the previous example.
Checking the status of a request
Both of the above example requests (and any other request you make) should return you an output similar to thisone:
{
"data": {
"id": "87bac308-e49f-4134-84cc-96b868f1e1e4",
"_type": "Conversation",
"initiatedAt": "2022-02-01T00:41:26.381Z[GMT]",
"targetEntityId": "7392",
"requestedBy": "b165fdaa-51d6-44b0-bfcd-5f431d623fa7"
}
}
If you'd like to look up the status of your request, you'd have to make following request, using the id from the output above (in data.id
):
curl -X GET -H "Authorization: Bearer <API token>" 'https://dev.dixa.io/v1/anonymization/request/87bac308-e49f-4134-84cc-96b868f1e1e4'
Which will give you a response similar to this:
{
"data": {
"id": "efbb03a0-be79-4ce0-b1ef-9f799e48143e",
"_type": "Conversation",
"initiatedAt": "2022-02-28T09:01:11.561Z",
"targetEntityId": "690",
"requestedBy": "c16ad1ec-39c1-4317-813f-a6198e05037d",
"processedAt": "2022-02-28T09:01:11.758Z"
}
}
Note the processedAt
attribute which contains a timestamp of when we have processed the request. If the request isn't processed yet, the value will be null
.