Delete My Data
curl --request DELETE \
--url https://api.example.com/storefront/v1/shopperimport requests
url = "https://api.example.com/storefront/v1/shopper"
response = requests.delete(url)
print(response.text)const options = {method: 'DELETE'};
fetch('https://api.example.com/storefront/v1/shopper', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.example.com/storefront/v1/shopper",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "DELETE",
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.example.com/storefront/v1/shopper"
req, _ := http.NewRequest("DELETE", url, nil)
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.delete("https://api.example.com/storefront/v1/shopper")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.example.com/storefront/v1/shopper")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Delete.new(url)
response = http.request(request)
puts response.read_body{
"success": true
}Widget API Reference
Delete My Data
Erase a shopper’s Genlook data on request: uploaded photos, generated try-on images, share links, and identity records.
DELETE
/
storefront
/
v1
/
shopper
Delete My Data
curl --request DELETE \
--url https://api.example.com/storefront/v1/shopperimport requests
url = "https://api.example.com/storefront/v1/shopper"
response = requests.delete(url)
print(response.text)const options = {method: 'DELETE'};
fetch('https://api.example.com/storefront/v1/shopper', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.example.com/storefront/v1/shopper",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "DELETE",
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.example.com/storefront/v1/shopper"
req, _ := http.NewRequest("DELETE", url, nil)
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.delete("https://api.example.com/storefront/v1/shopper")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.example.com/storefront/v1/shopper")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Delete.new(url)
response = http.request(request)
puts response.read_body{
"success": true
}Erase the calling shopper’s Genlook data. Use it to power a “Delete my data” control in a custom try-on UI; the built-in widget already offers one.
Erasure is synchronous and irreversible: a
On JavaScript, the
@genlook/storefront SDK is the recommended integration. deleteMyData() calls this endpoint, then wipes the local history and pending upload, and emits tryon:data_erased once the server confirms. It never rejects, so your UI can await it and navigate away unconditionally:SDK
await genlook.deleteMyData();
What gets erased
Everything tied to the shopper: uploaded photos, generated try-on images, share links (existing links stop working), the shopper’s try-on records, and their identity records. Copies in analytics are queued for erasure as well. The merchant’s order history and aggregate statistics are detached from the shopper rather than deleted.Scope
Erasure is scoped by how the shopper is identified:- From the storefront widget or a plugin proxy, where the customer identity is verified by the shop’s server, the erasure covers the shopper’s full identity: every device linked to their customer account or email.
- With a publishable key, the identity headers are declared by the caller and cannot be verified, so the erasure is deliberately scoped to the calling device’s anonymous id. One shopper can never erase another shopper’s data.
Request
No body. The shopper is identified by the standard identity headers (see identifying the shopper). This endpoint is rate-limited to 5 requests per minute per caller.Example
curl -X DELETE "https://api.genlook.app/storefront/v1/shopper" \
-H "Authorization: Bearer pk_your_key_here" \
-H "X-Genlook-Anonymous-Id: anon_1f0e..."
await fetch("https://api.genlook.app/storefront/v1/shopper", {
method: "DELETE",
headers: {
Authorization: `Bearer ${PUBLISHABLE_KEY}`,
"X-Genlook-Anonymous-Id": deviceId,
},
});
Response
boolean
true once the erasure completed.Response
{
"success": true
}
200 means the data is gone. Clear any history you cached on your side too. The shopper’s anonymous id stays usable and now refers to an empty shopper, so you can keep it or mint a new one.
Errors
| Status | Meaning |
|---|---|
429 | Rate limit exceeded; retry after a pause. |
500 | The erasure could not be completed; nothing was partially confirmed, so retry. |
Was this page helpful?

