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. 1. Control plane GET /v1/config and POST /v1/telemetry with Authorization: Bearer ng_pub_…. Works from curl, Python, C#, Go, PHP, Rust, Java — anything with HTTP.
  2. 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. 3. LLM call — Only masked text leaves your stack toward the model vendor.

What ships today

Language / stackHow you use NoeticGuard
JavaScript / TypeScriptFirst-party: @noeticguard/core in Node, Next.js, Express, or the browser (not in untrusted mobile binaries).
Python, Go, Java, PHP, C#, .NET, C++, RustCall 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 / KotlinSame 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