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 and Java 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 attempt and every successful outcome. 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 moment a sensitive action is attempted, and the moment it's confirmed 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 attempts 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. The dashboard surfaces a readiness indicator per
method— wait until it goes green before moving on. For most products this 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 Flows → New, 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 user attempted it, and when the attempt succeeded as intended. SignalGate learns from both.
actionLog the moment a user attemptsthe protected action. Don't wait to see if it succeeds — log immediately.
- Login form submitted (regardless of credential validity)
- OTP code requested
- Signup form submitted
- Payment intent created
- Password reset link requested
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 higher the confidence.
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. Duplicate envelopes are silently dropped, 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() after authentication succeeds, SignalGate sees only legitimate traffic — no contrast, no signal. Log every attempt, then also log the ones that succeeded.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.0log() + check() on Python 3.10+, Node.js 18+, Go 1.22+ and Java 17+.
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.