Soryk Sales is a Shopify-native app, and that shapes its whole security posture: your data stays inside Shopify, sessions are short-lived and verifiable, and sensitive actions leave an audit trail you can trust. This page explains what is stored where, how access is authenticated, and how Soryk meets Shopify's privacy obligations.
The short version. No customer personal data lives on Soryk servers. Everything is in your Shopify store; only transient items like login codes and cache sit in an EU Redis instance, and they clear on uninstall.
Where your data lives
All your data (agents, companies, commission rules, quotes, catalogs and settings) is stored inside your Shopify store, as metaobjects and native Shopify objects. There is no separate Soryk database holding your records.
The only things Soryk keeps outside Shopify are transient, and they sit in a Redis cache in the EU region:
- Login codes for magic-link sign-in, valid for a short window.
- Session tokens for the agent and customer apps.
- Rate-limit counters that protect login and payment endpoints.
- Short-lived analytics cache so dashboards stay fast.
- Push subscriptions for notifications to the apps.
None of these are customer records. If you uninstall, Soryk cleans up: the transient items are removed, and your Shopify data stays with you in your store.
Why this matters. Because your records live in Shopify as native objects and metaobjects, your data is portable and you are never locked into Soryk. See How the pieces fit together.
Authentication
Each surface is authenticated in the way that fits it:
- Embedded admin. Soryk verifies the Shopify session token on every request, so only your authenticated Shopify staff reach the admin.
- Agent and customer apps. These use signed
JWTsessions. The customer session is scoped to a single company, so a buyer only ever sees their own company's data. - Public quote links. A shared quote uses an unguessable token in its URL, so no login is needed to view it, and the link cannot be guessed.
Key rotation
JWT signing supports a previous-secret fallback. This lets you roll signing keys without logging everyone out: sessions signed with the old secret keep working while new ones use the new secret.
If you ever need to cut every in-flight session immediately, clear the previous secret. All sessions signed with it are invalidated at once.
Rate limiting
Sensitive endpoints are rate-limited to blunt brute-force and abuse:
- Login endpoints are limited per email and per IP.
- Payment writes are limited per shop.
When a limit is hit, the API returns a standard retry response so clients know to back off and try again later.
Tag safety
Soryk writes values such as an agent's email onto Shopify order tags so commissions and analytics can attribute orders. Those values are sanitised before they are written, so they cannot break tag parsing or be used to inject data into your tag lists.
Audit log
Sensitive admin actions are recorded and mirrored to an append-only log, so the trail cannot be quietly altered after the fact.
As a check on integrity, the admin shows a warning if the mirror and the stored records disagree, so tampering or drift does not go unnoticed.
GDPR & privacy
Soryk handles Shopify's mandatory privacy webhooks and verifies every webhook with HMAC before acting on it:
| Webhook | What Soryk does |
|---|---|
| customers/data_request | Responds to a data-subject request for the data Shopify holds. |
| customers/redact | Redacts customer data on request. |
| shop/redact | Cleans up after a shop uninstalls and its retention window ends. |
Because no customer personal data is stored on Soryk servers, data-subject requests are straightforward: the source of truth is your Shopify store, and Soryk has nothing of its own to redact.