LEGAL
Sub-processors
The third parties that may process data when you use Apus Platform. This page is the single source of truth: a vendor that touches customer data and is missing here is a commitment we are breaking.
What this page covers, and what it does not
The list is measured from committed source code and configuration, not from the running infrastructure. Where something is undetermined the page says so plainly — we do not infer a legal entity or a country that no contract has confirmed.
Undetermined
“Undetermined” means our legal team has not yet confirmed the contracting entity or where the processing infrastructure sits. It is not a blank cell, and we do not fill it with a guess.
Determined at runtime
For these rows the receiving party is decided by a configuration variable when the system runs, so no fixed legal entity can be stated in advance. We publish that as it stands instead of dropping the row.
Web layer — measured, with an enforcing gate
A browser can only reach hosts named in this site's content security policy. An automated gate reconciles that policy against the table below, so a new vendor cannot appear in the code while staying absent from this list.
| Service | Legal entity | Processing country | Data touched | Status |
|---|---|---|---|---|
| Google Fonts | Undetermined | Undetermined |
| Active |
| Google Analytics · Google Ads · Google Tag Manager | Undetermined | Undetermined |
| Present in code, switched off |
| Meta Pixel | Undetermined | Undetermined |
| Present in code, switched off |
| TikTok Pixel | Undetermined | Undetermined |
| Present in code, switched off |
| LinkedIn Insight Tag | Undetermined | Undetermined |
| Present in code, switched off |
| Microsoft Clarity | Undetermined | Undetermined |
| Present in code, switched off |
| tawk.to | Undetermined | Undetermined |
| Not used |
| Cloudflare Turnstile | Undetermined | Undetermined |
| Present in code, switched off |
| jsDelivr | Undetermined | Undetermined |
| Not used |
Platform layer — declared
These systems run outside the website's own source, so the table below is a declaration drawn from our programme record rather than the output of an automated gate. We state that boundary rather than leaving you to guess it.
| Service | Legal entity | Processing country | Data touched | Status |
|---|---|---|---|---|
| Apus ID SMTP relay | Công ty Cổ phần Giải pháp Công nghệ số APUS | VN |
| Active |
| Sentry | Undetermined | Undetermined |
| Present in code, switched off |
| Google Sheets | Undetermined | Undetermined |
| Active |
| Voyage AI | Undetermined | Undetermined |
| Present in code, switched off |
| Anthropic · OpenAI · Google · Replicate · fal.ai | Undetermined | Undetermined |
| Present in code, switched off |
| OpenAI-compatible endpoint (arbitrary BASE_URL) | Determined at runtime | Determined at runtime |
| Present in code, switched off |
| Telegram | Undetermined | Undetermined |
| Decided, not yet connected |
| Status-page vendor (not yet chosen) | Undetermined | Undetermined |
| Decided, not yet connected |
| SMS gateway | Undetermined | Undetermined |
| Decided, not yet connected |
Notice before a change
Before we add or replace a sub-processor we notify customers under contract, with enough time for you to object. Every change is recorded in the log below, and that log is only ever appended to, never rewritten.
We give at least 30 days’ notice before a new sub-processor begins processing data, so you have time to object.
Change log
- Register compiled for the first time.
Why this list is the single source of truth
No Apus team may add a vendor that touches customer data without entering it here. For the web layer that rule is enforced by an automated gate in our release process.