คำแปลนี้สร้างโดยเครื่องและกำลังรอการตรวจทานเปลี่ยนเป็นภาษาอังกฤษ
ในหน้านี้

Browser SDK troubleshooting

Use this page when the collector does not start, does not collect, or collects less than you expect. Every symptom below comes from an error body, a result code, an event or a console message that the collector produces. Start with the console checks, then find your symptom in the tables.

What it is

Availability: Evaluation access. Availability depends on your plan, role and the modules enabled for your organisation.

The core script fails open. A problem in the collector does not block your page, and most failures show up as a missing event, a reason and code in a result, a noxtica:error event, or an HTTP error on a /client/* call. This page maps those signals to causes. Concepts are on Install and Browser Runtime; the full reference is on the other pages of this section.

Prerequisites

  • A browser with DevTools (Console and Network).
  • The page that shows the problem, served from the origin registered for the Site Key.
  • Your Site Key. It is public. Never post a Server API key (sk_…), a session token or a cookie value in a ticket.
  • For consent questions, the consent mode of the domain: Backoffice → Integrations & API → Script & Consent → Consent & extensions.

Steps

1. Read the loader state

Run this in the console of the affected page:

({
	version: window.noxtica && window.noxtica.v,                 // loader version, set by the initial core script
	loader: typeof window.NoxticaCollector,                       // 'object' when a core script ran
	client: typeof window.noxticaClient,                          // 'object' when a data-auto-init tag bound
	consent: window.noxticaClient && window.noxticaClient.getConsent(),
	extensions: window.noxticaClient && window.noxticaClient.getExtensionsState(), // 'not-loaded' | 'attached' | 'built-in'
	lastResult: window.noxticaResult,
	lastError: window.noxticaLastError,                           // { source, message, time }
	logLevel: window.NoxticaCollector && window.NoxticaCollector.getLogLevel(),
});

To see more, set the log level to debug with data-log-level="debug" on the tag and reload. The loader is silent by default. See Script attributes and client options.

2. Check the Network tab

Filter by your collector host. A working page shows the core script and POST /client/token with status 200. After consent in a gated mode it also shows the extensions script, engine files and POST /client/submit. An error body from the collector carries a requestId; keep it for support.

Read getConsent(): mode, modeResolved and the four categories. Then call await window.noxticaClient.loadExtensions() and read ok, reason and code. The tables below explain each value.

4. Check the policy

Open the console on a page with the policy in force and look for violations that name a Noxtica host. See Content Security Policy, hosts and first-party relay.

5. Collect what support needs

Send: your Site Key, the page URL without query strings, the loader version (window.noxtica.v), the output of step 1, the failing request with its status and requestId, and the time. Contact your account team or use Contact. Platform incidents are listed on status.noxtica.com.

6. Check the browser

The collector needs WebAssembly and blob: workers for its engines. GPU attestation also needs WebGPU: without it the loader logs WebGPU not available and skips that step. The Web Locks API is optional; a browser without it falls back to a localStorage lock for the cross-tab check. A privacy mode, an extension or a network rule that blocks cross-origin requests, storage, workers or WebAssembly reduces the evidence or stops collection, and the page keeps working.

Headless and automated browsers are scored as bots, and your CDN may challenge them. Do not compare risk scores from headless runs. Test on a lab page, as described in Release checks, testing and versions.

Noxtica does not publish a verified minimum browser version list in this documentation. Test the browsers and privacy modes your own application supports.

Verify it works

After a fix, reload the page with a clean profile and check:

  • typeof window.noxticaClient is 'object' and window.noxtica.v holds a version.
  • POST /client/token answers 200.
  • window.noxticaLastError is undefined.
  • In a gated mode, getConsent().modeResolved is true; after consent getExtensionsState() is 'attached'.
  • Exactly one noxtica:collected event fires for the page.

Troubleshooting

The script does not start

SymptomCauseFix
window.noxticaClient undefined and no noxtica:* eventsThe tag lacks data-auto-init or data-site-key, or the src file name has neither noxtica-collector nor /noxtica.jsAdd the attributes and keep the file name. A tag without a Site Key is skipped silently.
window.NoxticaCollector undefinedThe core script did not load: blocked by CSP or a network rule, a 404, or an integrity failureRead the failed request in Network and the console. See the CSP page.
Pinned tag blocked with an integrity errorThe pin is more than three releases old, or the hash was copied from a documentCopy the tag again from Script & Consent → Snippets, or use the stable tag.
NX001: already loaded (v…), duplicate tag v… ignored.A second core or combined tag on the pageRemove it. The initial tag keeps running and its version is window.noxtica.v.
window.noxtica(...) does nothingwindow.noxtica is a plain object without q, or the tag lacks data-auto-initDefine the stub as a function or array.
NoxticaCollector: siteKey is requiredcreateClient found no Site KeyPass siteKey or keep data-site-key on a collector tag.
A relay or proxy path loads the script but nothing bindsThe proxied file name lost noxtica-collectorKeep the file name when you proxy the script.

POST /client/token fails

Status and bodyCauseFix
403 Origin not allowedThe request had no Origin header, so it did not come from a normal browser pageTest from a real page on the registered origin.
403 Origin mismatchThe page origin differs from the origin registered for the Site KeyUse the key of the exact origin. Staging needs its own domain and key.
400 Missing siteKeyThe request body had no Site KeyCheck the tag’s data-site-key or the siteKey option.
401 Invalid siteKeyThe Site Key is unknown or inactiveCopy the key again from Backoffice → Domains.
403 Tenant suspended or Domain disabledThe account or the domain is not activeContact your account team.
429 Rate limit exceeded, with Retry-AfterThe tenant and client address hit the token rate limitWait for Retry-After.
429 quota_exceeded with code COLLECTOR_REQUESTS_QUOTA_EXCEEDEDThe monthly collector request quota is used up, when quota enforcement is enabledCheck usage in Backoffice and see Usage, quotas and metering.
413 Payload too large or 415 Content-Type must be application/jsonA custom client or proxy changed the requestDo not rewrite collector requests.
SymptomCauseFix
noxtica:collected has skipped: 'consent_required'A gated mode and deviceId not grantedCall setConsent({ deviceId: 'granted' }) after the visitor agrees. Not an error.
getConsent().mode is not_required on an api domainmodeResolved is false: the saved mode has not arrivedWait for noxtica:consent-changed, or declare data-consent-mode.
setConsent throws NoxticaCollector.setConsent requires granted, denied, or { analytics, replay, deviceId, behavioral }A boolean or another shapePass 'granted' or 'denied'.
setConsent throws unknown consent category or … must be granted or deniedA wrong key or valueUse the four category names with the two strings.
Extensions load for visitors who declinedNot required mode with automatic loading, or a legacy script URLSee Consent modes.
Two noxtica:collected events with different idsLoader older than 3.8.1Update to the current loader; take the id from the server verify call.
fingerprintId in the browser differs from the serverThe core and the extensions mint different idsUse the id from POST /v1/protected-actions/verify.

Extensions: loadExtensions() results

loadExtensions() never rejects. It resolves { ok: true, loaded } or { ok: false, reason, code, … }. A later call retries after a failure.

reasoncodeCauseFix
consent_missingconsent_requiredYou passed { requireConsent: true } in a gated mode and no category is grantedGrant a category before you call it, or drop the option.
consent_missingconsent_withdrawnA queued loadExtensions was dropped because the queued consent denies all four categories (loader 3.8.1 and later)Call loadExtensions() after a grant.
csp_blockedscript-src-elem or script-srcAn enforced CSP blocked the scriptAllow the collector host in that directive.
integrity_mismatchsha384_mismatchA pinned file’s bytes differ from its hashCopy the pinned tag again.
networkhttp_<status>, fetch_failedThe file returned an HTTP error or no responseCheck the host, the proxy and connect-src.
timeoutscript_timeoutNo load or error event within 20 secondsRetry. Check the network path.
already_loadedscript_presentA <script> for the extensions URL is in the page but nothing registeredRemove your own extensions tag, or fix why it did not run.
unknownbuild_mismatchThe extensions come from another build than the coreLoad core and extensions from the same collector release.
unknowninvalid_extensions, handoff_failed, not_registeredThe extensions did not register or take overReload; report with the error text.
unknownscript_exception, script_errorThe browser rejected a file that is reachable, or the script threwCheck the console.
unknownno_pinned_manifest, no_document, client_destroyedThe core has no extensions manifest, there is no document, or the client was destroyedUse a current core, call from a browser page, create a new client.
unknownlegacy_loaderThe typed wrapper normalised a boolean from a loader older than 3.8.0Update the loader.

error is human text. Do not parse it. The classification is approximate, because the browser’s error event carries no cause.

Protected actions

SymptomCauseFix
protect() resolves error: 'undeclared_protected_action'The name is not declared for the domainDeclare it and reload.
protect() rejects with NoxticaCollector.protect: invalid protected action nameThe name does not match the action grammarUse lowercase letters, digits, - and _, starting with a letter.
A form posts without nox_request_idThe check exceeded the hold time or the script was blockedTreat it as no client signal. See Protected actions.
Verify returns 409, 404 or 422Replay, expired or foreign id, or an action or domain mismatchSee the status table on the protected-actions page.

Responses and signatures

SymptomCauseFix
Console warnings Policy signature verification failed or Result signature verification failed, or errors that mention Missing policySigned envelope or Missing resultSigned envelopeA response without its signed envelope, or whose signature does not verify. A rule or proxy that rewrites collector responses can cause it.Stop rewriting collector responses. Keep signatureMode at require.
noxtica:error with source Auto-init failed, Auto-check-once failed, Auto-collect failed or Deferred page check failedThe automatic step threw; message holds the cause, cut to 200 charactersRead window.noxticaLastError.message, then match it to a row above.

Challenges and blocks

SymptomCauseFix
noxtica:challenge with status: 'unsupported'The browser cannot run the requested method (gpu-pow or turnstile)Informational. The server decides what happens next.
A full-page overlay or a redirectThe server issued a block for the visit; noxtica:block reports overlay or redirectReview the risk decision in Backoffice. The page cannot dismiss the overlay.