Integrate SignalGate
SignalGate learns from your traffic before it blocks anything. Integration happens in two phases: first you plug the SDKs in and start logging events, then once enough events have accumulated, SignalGate turns on real-time blocking.
Quickstart
Phase 1 is a one-time setup (~10 minutes of code). Phase 2 is paced by your real traffic — you can't skip the data-gathering step.
Plug it in
Wire the SDKs into your stack so events start flowing. No blocking yet — you can't block what you can't recognize.
- 1
Sign up and create an API key.
Sign up at /signup, then go to Settings → API Keys → click “+ Create Key”. Your key starts with
pk_live_and is shown exactly once.The dashboard also surfaces your tenant's public keyat this step. You'll paste it into the frontend SDK in Step 2.
- 2
Integrate the frontend SDK.
Drop the SDK on every page where a sensitive action lives (login, signup, payment, OTP request). On submit, you receive an encrypted four-field envelope.
See Frontend SDK reference → for install options, configuration, and the payload shape.
- 3
Pass the fingerprint payload to your backend.
Recommended: include the envelope in your existing request body as a top-level
signalgatefield.This is your call, not ours. Anything that gets the four-field envelope from the browser to your backend works — request body, custom header, dedicated endpoint, message queue. Pick whatever fits your stack. - 4
Install the backend SDK.
Backend SDKs ship for Python, Node.js, Go, Java, PHP and C# (.NET) today. See Backend SDK reference → for install, client setup, and full code examples in every stack. For any other language, the HTTP API is small enough to wrap directly.
Train it on your traffic
Log every action after it happens and every target action after it succeeds. Once SignalGate recognizes patterns, you create a workflow and turn on blocking.
- 5
Log every action AND every target action.
SignalGate learns from labeled pairs: the sensitive action, logged after it happens, and the target action, logged after it succeeds — once you've confirmed the action was legitimate. Both calls use
client.log()— fire-and-forget, no verdict returned.See the event model below for what counts as an “action” vs “target action” in different scenarios.
Don't skip the target_action log.Without it, SignalGate sees actions but can't tell which ones were legitimate. Detection trained on action-only data will misidentify normal users at random. - 6
Let events accumulate.
Both call types stream into your Events feed. Keep the SDK in your hot path; real traffic does the rest. For most products, gathering enough events takes a few days.
- 7
Create a flow in the dashboard.
A flowtells SignalGate “for this method, find patterns that distinguish target actions from abandoned ones.” In the dashboard: click New flow on the Flows card, pick the method (e.g.
login), name it, submit.Flow configurationis also exposed in the dashboard. Default settings cover most use cases out of the box; as you tune to your traffic shape you'll find knobs for sensitivity, minimum group size, and how aggressively the engine acts. Concrete options are still being finalized during the beta — start with defaults, or book a demo to talk through your setup. - 8
Let SignalGate learn from your traffic.
Once it has learned enough from your traffic, detection turns on automatically for the workflows you've enabled — but it doesn't affect live traffic until you start calling
check()in Step 9. - 9
Enable check() at the action place.
Add a
check()call before the action to get a verdict and decide whether to allow it. Keep thelog()calls after the action succeeds and after the target-action succeeds, so learning continues with enforcement on.See Verdicts → for the verdict actions and how to handle each.
Event model
Two labels on every method: when the action happened, and when it led to the outcome you wanted. SignalGate learns from both.
actionLog the protected action after it happens — once your handler has carried it out, not the moment the request arrives. A failed attempt, such as a login with the wrong password, is not logged.
- Login: credentials accepted
- OTP code sent
- Signup form accepted
- Payment intent created
- Password reset link sent
target_actionLog again when you have confirmed the action was legitimate. The trust signal comes from your business logic, not from the fingerprint.
- Login: credentials valid AND 2FA passed
- OTP: correct code entered within window
- Signup: account converted (any real-use signal)
- Payment: charge captured successfully
- Password reset: new password set + used to log in
SignalGate's models compare behavior across these two buckets. A pattern common in action but rare in target_action is a fraud signal — the bigger the gap, the stronger the signal.
action and target_actionevents are deduplicated server-side via the nonce inside each fingerprint envelope. Don't replay the same envelope across two log calls — re-collect a fresh payload from the browser before each event, or use whatever per-event identifier mechanism your SDK exposes. A reused envelope is rejected with HTTP 422 (REQUEST_REJECTED), which means SignalGate will see only one half of the pair.target_action flag, you can attach arbitrary key/value pairs to any event via the custom dict. SignalGate surfaces them in the dashboard and (eventually) consumes them as additional signals over time. Conventions for which custom fields the engine will weigh are still being shaped — for now, treat customas a flexible passthrough that's available when you need it.log() before your handler knows whether the action went through, failed attempts land in your data as if they had happened. Keep every log() call after its success: the action after it happens, the target action after it succeeds.SDK versions
Current public releases. SDKs follow semantic versioning — minor bumps are non-breaking.
Frontend JS SDK
@signalgate/fingerprint-sdk v0.3.3Browser-side fingerprint collector. CDN entrypoint: https://sdk.signalgate.ai/v0.3.3/index.global.js.
Backend SDKs
signalgate==0.3.2@signalgate/node 0.1.0signalgate-go 0.1.0ai.signalgate:backend-sdk:0.1.0signalgate/signalgate-php 0.1.0SignalGate 0.1.0 (NuGet)log() + check() on Python 3.10+, Node.js 18+, Go 1.22+, Java 17+, PHP 8.1+ and .NET 8+.
Mobile SDK
Kotlin library on Maven Central — collect the encrypted payload in your Android app and forward it to your backend. See the Mobile SDK reference for the current release and install line.
Need a client for a language not listed? The HTTP API is small enough to wrap yourself, or talk to us about prioritizing an official SDK.
Continue reading
Questions or stuck on integration? Get in touch — we read every message during beta.