Token & authentication issues
1. Invalid signature
1. Invalid signature
iss.Fix: Verify that iss matches your NSDK_CONNECTED_APP_CLIENT_ID and that the token is signed with the matching NSDK_CONNECTED_APP_SECRET_KEY on your backend only.2. Invalid audience
2. Invalid audience
aud claim is set to the wrong value.Fix: Set aud exactly to nsdk-embed. Do not reuse access-token or refresh-token audiences from other systems.3. Clock skew or wrong time unit
3. Clock skew or wrong time unit
iat and exp were generated in milliseconds instead of seconds, or the backend server clock is out of sync.Fix: Generate iat and exp as Unix timestamps in seconds and keep your backend clock synchronized with a reliable time source.4. Missing required claims
4. Missing required claims
iss, sub, aud, iat, exp, and jti on every token. Also provide nsdk.user.name and nsdk.user.email so the embedded session has the expected user context.5. Embed token expired before use
5. Embed token expired before use
6. Registration cannot continue
6. Registration cannot continue
Frontend & embedding issues
7. Loader script not loading
7. Loader script not loading
NSDK is undefined, or nsdk-loader.js never appears in the browser network log.Cause: NSDK_BASE_URL is wrong, the script URL is blocked by CSP, or the browser cannot reach the hosted SDK origin.Fix: Confirm the exact loader URL, open it directly in the browser, and allow the SDK origin in your script-src policy where required.8. Container not detected
8. Container not detected
data-nsdk="true". For imperative mode, confirm the mount selector resolves to exactly one element.9. Iframe blocked by CSP
9. Iframe blocked by CSP
frame-src, child-src, or related policies.Fix: Update your CSP to allow the Narrative SDK origin for framed content and any required network requests from the embedded experience.10. Token not reaching the iframe
10. Token not reaching the iframe
data-nsdk-token before the SDK boots. In imperative mode, pass embedToken directly in NSDK('boot', ...) and confirm the token value is not empty.Backend & network issues
11. CORS blocks token endpoint
11. CORS blocks token endpoint
12. Token endpoint is not authenticated
12. Token endpoint is not authenticated
Session & runtime issues
13. Widget renders but shows an unauthenticated state
13. Widget renders but shows an unauthenticated state
Data & product surface issues
15. API returns 401 after successful embed
15. API returns 401 after successful embed
401.Cause: Bootstrap succeeded, but the requested product surface, tenant mapping, or user-level access is unavailable for the downstream request.Fix: First confirm the widget booted with a fresh token. Then verify the user, tenant, and product surface access expected by the destination API or experience.16. Data sync delays or missing data
16. Data sync delays or missing data
17. Different-currency bank account is rejected
17. Different-currency bank account is rejected
18. Money page appears empty immediately after onboarding
18. Money page appears empty immediately after onboarding