Skip to main content

Data Subject Requests (GDPR)

Under the GDPR, a person can ask for a copy of their personal data. A person can also ask for the erasure of their personal data. This page tells you how GoWit handles these requests. It also tells you what you must do as a marketplace.

Roles​

GoWit keeps personal data about two groups of people. The role of GoWit is different for each group.

GroupExample dataControllerProcessor
Shoppers on your site or appcustomer_id, session_id, ad impressions, clicks and salesYour marketplaceGoWit
Dashboard users (your staff and your advertisers' staff)Name, email, login dataGoWit—
  • For shopper data, you are the controller. The shopper sends the request to you. You send it to GoWit through the API on this page.
  • For dashboard users, GoWit is the controller. The user sends the request to GoWit from the dashboard.
  • For an advertiser (seller) contact, the advertiser record comes from your feed. Use the feed to remove the contact. See Advertisers and sellers.

Shopper requests​

Use these endpoints for shopper requests. They use the same API key as the Integration API. Send the key in the Authorization header.

RequestEndpoint
Erase shopper dataPOST /public/marketplaces/{marketplaceID}/dsar/customers/erase
Export shopper dataPOST /public/marketplaces/{marketplaceID}/dsar/customers/export
Get the request statusGET /public/marketplaces/{marketplaceID}/dsar/requests/{requestID}

For the full schemas, see the Data Subject Requests API reference.

Erase shopper data​

  1. Collect all customer_id and session_id values that you sent to GoWit for the shopper.
  2. Send them in one request. Send at least one ID in total. Send at most 1,000 IDs in each list.
  3. Keep the request_id from the response.
curl --location '<YOUR_BASE_URL>/public/marketplaces/19/dsar/customers/erase' \
--header 'Authorization: YOUR_MARKETPLACE_API_KEY' \
--header 'Content-Type: application/json' \
--data '{
"customer_ids": ["c-8f14e45fceea167a"],
"session_ids": ["0b6f6c3e-2f1d-4c55-9a0e-6d1d2b7e7a10"]
}'

The response has the status 202 Accepted:

{
"request_id": 4211,
"status": "REQUESTED"
}

Export shopper data​

  1. Send the customer_id of the shopper.
  2. Save the response body as a file. The response is the export.
  3. Give the file to the shopper.

GoWit builds the export when you send the request. The response has the status 200 OK and the header Content-Disposition: attachment; filename="gowit-shopper-export-YYYY-MM-DD.json". The file contains at most 10,000 events. If the shopper has more, the field truncated is true and the file holds the oldest 10,000. Contact GoWit support for the rest.

GoWit does not store the export file. GoWit records only that the export occurred, with a hashed customer ID.

You can send at most 60 export requests per hour for each marketplace. Over this limit, the API returns 429 Too Many Requests with a Retry-After header. Wait for the Retry-After seconds, then try again.

curl --location '<YOUR_BASE_URL>/public/marketplaces/19/dsar/customers/export' \
--header 'Authorization: YOUR_MARKETPLACE_API_KEY' \
--header 'Content-Type: application/json' \
--data '{
"customer_id": "c-8f14e45fceea167a"
}' \
--output gowit-shopper-export.json

The file has this structure. The example is a captured response from a test marketplace; it shows one of the three events.

{
"request_id": 3,
"generated_at": "2026-10-08T10:51:43.823Z",
"marketplace_id": 1,
"customer_id": "dsar-after-002",
"event_count": 3,
"truncated": false,
"events": [
{
"ad_id": "",
"ad_placement_id": 1,
"ad_request": null,
"ad_response": null,
"advertiser_id": 0,
"age_range": "",
"agency_id": 0,
"arrival_date": "1970-01-01T00:00:00Z",
"attributed_time": "1970-01-01T00:00:00Z",
"auction_type": "",
"audience_ids": [],
"bid": null,
"campaign_id": 1,
"category_id": 0,
"category_text": "",
"channel": 0,
"city": "",
"click": null,
"creative_id": 0,
"currency": "",
"customer_age": 0,
"customer_city": "",
"customer_device_environment_type": "",
"customer_device_type": "",
"customer_gender": "",
"customer_id": "dsar-after-002",
"customer_targeting": "",
"customer_type": "",
"customer_user_agent": "",
"device_id": null,
"direct_sale": null,
"direct_sale_amount": null,
"event_id": "",
"event_type": "impression",
"gender": "",
"impression": null,
"indirect_sale": null,
"indirect_sale_amount": null,
"keyword": "",
"keyword_id": 0,
"language": "",
"location_id": 0,
"marketplace_conversion_range": 0,
"marketplace_id": 1,
"match_type": "",
"offsite_campaign_id": 0,
"offsite_click": null,
"offsite_creative_id": 0,
"offsite_direct_sale": null,
"offsite_direct_sale_amount": null,
"offsite_indirect_sale": null,
"offsite_indirect_sale_amount": null,
"order_id": "",
"organic_sale": null,
"organic_sale_amount": null,
"placement_id": 0,
"platform": "",
"post_attributed": 0,
"post_click_direct_sale": null,
"post_click_direct_sale_amount": null,
"post_click_indirect_sale": null,
"post_click_indirect_sale_amount": null,
"post_view_direct_sale": null,
"post_view_direct_sale_amount": null,
"post_view_indirect_sale": null,
"post_view_indirect_sale_amount": null,
"product_id": 1,
"product_impression": null,
"product_resource_id": "",
"region_id": 0,
"request_id": "",
"request_product_resource_id": [],
"sale": null,
"sale_amount": null,
"sale_request_product_resource_id": "",
"sale_request_product_taxonomy": "",
"search_text": "",
"segment_ids": [],
"session_id": "dsar-after-session-002",
"spend": null,
"time": "2026-10-08T10:38:44Z",
"video_complete": null,
"video_start": null,
"viewable_impression": null
}
]
}

events contains the ad event rows of the shopper: impressions, clicks and sales. event_count is the number of rows.

Get the request status​

Use the status endpoint to monitor an erase request. An export request has the status DONE immediately.

curl --location '<YOUR_BASE_URL>/public/marketplaces/19/dsar/requests/4211' \
--header 'Authorization: YOUR_MARKETPLACE_API_KEY'
{
"request_id": 4211,
"request_type": "ERASE",
"status": "DONE",
"created_at": "2026-10-07T09:15:00Z",
"completed_at": "2026-10-08T03:04:12Z"
}

The status is one of REQUESTED, APPROVED, RUNNING, DONE, FAILED or REJECTED. All times are RFC 3339 in UTC.

Shopper identifiers must be pseudonymous​

  • Do not put an email address, a phone number or a name in customer_id.
  • Use your internal user ID, or a hash of it.
  • Use a random value for session_id, for example a UUID.

GoWit does not need to know who the shopper is. With pseudonymous IDs, the ad data does not identify a person directly.

Dashboard user requests​

A dashboard user manages their own requests from the My account page in the GoWit dashboard.

  • Download my data: the user downloads a JSON file with their personal data immediately.
  • Request deletion: the user sends an erasure request. A GoWit administrator checks the request and does the erasure.

GoWit does not accept erasure requests by email. GoWit cannot confirm the identity of the sender of an email. Tell your users to log in and use the My account page.

To correct a name or an email address, the user contacts GoWit support.

Advertisers and sellers​

When your feed sends an advertiser with the status DELETED:

  • GoWit removes the contact email of the advertiser.
  • The advertiser stays PAUSED. Its campaigns do not run.
  • GoWit keeps the advertiser record and its reports. The reports stay correct for you and your other advertisers.

If a seller asks for full erasure of their contact data, contact GoWit support. After GoWit erases a seller contact, later feed updates do not write the email or the name back.

Time limits​

RequestTime limit
Shopper erasureWithin 24 hours. A daily purge at 02:00 UTC erases all open shopper requests.
Shopper exportImmediately, in the response.
Dashboard user erasureWithin 30 days after the user sends the request from the My account page.
Dashboard user exportImmediately, from the My account page.

Backups and logs​

GoWit does not change backups and logs after an erasure. Backups and logs expire within the retention period stated in our DPA.

GoWit records each erasure. If GoWit restores a database from a backup, GoWit applies the recorded erasures again before the data is used. A restore can also remove the records of erase requests that you sent after the backup time, open or completed. GoWit then copies these records back from the database as it was before the restore. If GoWit cannot do that, GoWit tells you the affected period and asks you to send the erase requests of that period again. To send a completed request again is safe: the data stays erased, and GoWit records the erasure again.

Keep the request_id and the send time of each request. A 404 from the status endpoint for a known request_id means that a restore removed the request record. A copied record gets a new request_id. Contact GoWit support: GoWit tells you if the erasure is done or if you must send the request again.