webhookTopics, and customers/redact and shop/redact are sent whatever
scopes the installation currently holds. If your app stores customer data, you must handle them.
The three notices
shop/redact is shop wide: one envelope per installation, with the shop as both the routing key and
the record being erased. The two customer topics carry the customer id in resourceId.
The 30 day expectation
Complete each notice within 30 days of the delivery.customers/redact: erase every record you hold for that customer id, including backups, caches and derived data, and stop using it. Keep only what the law requires you to keep, and keep that quarantined rather than in active use.shop/redact: erase everything you hold for the shop and its customers, and deactivate your copy of the store.customers/data_request: compile what you hold for that customer and give it to the merchant, or tell them you hold nothing.
What a notice looks like
Acustomers/redact delivery:
shop/redact delivery uses "resource": "shop", "action": "redact" and the shop id as
resourceId. A customers/data_request delivery uses "action": "data_request".
There are no customer fields in any of them. Use shopId and resourceId to find your own records.
Do not call the Salesive API to fetch the customer: the record may already be gone, and the notice is
the authority.
Handle a notice
- Verify the signature and reject a stale timestamp. See Webhooks.
- Dedupe on
id; delivery is at-least-once. - Route on
topic. - Look the record up by
shopIdandresourceIdin your own storage. - Erase or export it, and record when you completed it.
- Acknowledge with a
2xxquickly. Do the work asynchronously if it is slow.
A webhook has no reply channel. If the merchant asked for a copy of the data, deliver it through
your own app UI or email, not by answering the webhook.
Delivery details
- One delivery per installation, at the URL and signing secret that installation resolves to. A
production install uses its pinned release; a development install uses
devConfig. - Mandatory: these topics are delivered even when they are not in
webhookTopics. customers/redactandshop/redactneed no scope.customers/data_requestneeds one of the three customer scopes.- If your app has no webhook URL, nothing is delivered. Set one before you store any customer data.
- Every attempt appears in the delivery log for 14 days.
Also do this
- Store only the customer data your app actually needs, and know where every copy lives.
- Encrypt customer data at rest.
- Keep a data map so a redaction is complete rather than best effort.
- Treat a
customers/data_requestas an export task, not as permission to read more of the store.
Next steps
Webhooks
Signature verification, topics and retries.
Scopes & permissions
Which customer scopes exist and how approval works.

