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
Frontend & embedding issues
6. Loader script not loading
6. 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.7. Container not detected
7. Container not detected
data-nsdk="true". For imperative mode, confirm the mount selector resolves to exactly one element.8. Iframe blocked by CSP
8. 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.9. Token not reaching the iframe
9. 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
10. CORS blocks token endpoint
10. CORS blocks token endpoint
11. Token endpoint is not authenticated
11. Token endpoint is not authenticated
Session & runtime issues
12. Widget renders but shows an unauthenticated state
12. Widget renders but shows an unauthenticated state
13. Widget stops working after SPA navigation
13. Widget stops working after SPA navigation
Data & product surface issues
14. API returns 401 after successful embed
14. API returns 401 after successful embed
401.Cause: Bootstrap succeeded, but the requested product surface, tenant mapping, or user-level access is not ready 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.15. Data sync delays or missing data
15. Data sync delays or missing data
16. User cannot connect a second bank account
16. User cannot connect a second bank account
17. Money page appears empty immediately after onboarding
17. Money page appears empty immediately after onboarding