Docs / Language support
Language & platform support
HTTP lives here: any stack can call GET /v1/config and POST /v1/telemetry. First-party maskPii runs in Node/TS (or a BFF) — see the SDK quickstart. Endpoint shapes live on the API Gateway page; this page is only the language map.
On this page+−
How every language connects
- 1. Control plane —
GET /v1/configandPOST /v1/telemetrywithAuthorization: Bearer ng_pub_…. Works from curl, Python, C#, Go, PHP, Rust, Java — anything with HTTP. - 2. Local mask — Run the canonical engine (
@noeticguard/core) in Node or a BFF so tokens like[EMAIL_1]are identical to Browser Shield. Do not reimplement detectors per language. - 3. LLM call — Only masked text leaves your stack toward the model vendor.
What ships today
| Language / stack | How you use NoeticGuard |
|---|---|
| JavaScript / TypeScript | First-party: @noeticguard/core in Node, Next.js, Express, or the browser (not in untrusted mobile binaries). |
| Python, Go, Java, PHP, C#, .NET, C++, Rust | Call GET /v1/config and POST /v1/telemetry from your process. Run maskPii in a small Node/TS service (BFF) until a WASM or native wrapper ships. |
| Swift / Kotlin | Same as other native apps: send chat text to your backend; never embed ng_secret_ in the IPA/APK. Control-plane HTTP is fine with a publishable key only if the key is not shipped in the binary — prefer the backend. |
Python & C# (control plane)
Control-plane calls only. After config fetch, run maskPii in Node/TS — do not post raw prompts to NoeticGuard.
python
import os
import requests
BASE = "https://api.noeticguard.com"
HEADERS = {"Authorization": f"Bearer {os.environ['NOETICGUARD_PUBLISHABLE_KEY']}"}
config = requests.get(f"{BASE}/v1/config", headers=HEADERS, timeout=10).json()
# Control plane only. Run maskPii in Node/TS (see SDK quickstart) — do not POST raw prompts here.
requests.post(
f"{BASE}/v1/telemetry",
headers={**HEADERS, "Content-Type": "application/json"},
json={"masked_count": 3},
timeout=10,
)csharp
using var client = new HttpClient();
client.DefaultRequestHeaders.Authorization =
new System.Net.Http.Headers.AuthenticationHeaderValue(
"Bearer", Environment.GetEnvironmentVariable("NOETICGUARD_PUBLISHABLE_KEY"));
var config = await client.GetStringAsync("https://api.noeticguard.com/v1/config");
// Control plane only. Run maskPii in a Node/TS service (SDK quickstart).
await client.PostAsync(
"https://api.noeticguard.com/v1/telemetry",
new StringContent(
"{"masked_count":3}",
System.Text.Encoding.UTF8,
"application/json"));Swift, Kotlin, and desktop apps
iOS, Android, WinUI, WPF, Qt, and Electron should treat masking like any other secret: it belongs on a server you control. The client sends the user message to your API; your API runs maskPii, calls the LLM, then optionally unmasks for display. Publishable keys stay on the server (or a tightly scoped BFF), never in the store binary.
Roadmap
- Now — JS/TS core, CLI scan, Browser Shield, OpenAPI-style HTTP for every language.
- Next — Official thin Python client (config + telemetry helpers) after public npm.
- Then — Same engine compiled to WASM so Go, C#, Java, and others call one binary in-process (no per-language detector forks).
Next: SDK quickstart · API Gateway