Browse documentation
Reference

Errors and troubleshooting

Build handling around the stable code, not the human-readable message. Do not blindly retry 4xx responses; most require correcting identity, configuration, or signing logic.

CodeHTTPCauseWhat to do
SSO_REQUEST_INVALID400Form field missing/emptySubmit strings for clientId, payload, and signature.
SSO_PAYLOAD_INVALID400Payload is not Base64URL JSONEncode UTF-8 JSON once; inspect locally without logging production data.
SSO_IDENTITY_REQUIRED400sub or email absentLoad both from trusted authenticated user state.
SSO_NAME_REQUIRED400First-time JIT identity has no valid nameSign the authenticated user's display/full name.
SSO_CONFIGURATION_INVALID400Invalid origin/path administrationUse HTTPS origins and safe relative paths.
SSO_INTEGRATION_UNAVAILABLE401Credential missing/revoked or tenant inactiveConfirm environment and tenant status; contact admin.
SSO_CREDENTIAL_EXPIRED401Integration credential passed its configured expiryTenant administrator must renew or issue a credential.
TENANT_CONTRACT_EXPIRED403Non-renewing tenant agreement endedContact the organization or Nanaade account owner.
SSO_SIGNATURE_INVALID401Wrong secret/encoding or changed payloadSign exact encoded payload with active secret.
SSO_ASSERTION_EXPIRED401Expired, too long, or iat >60s aheadGenerate immediately, use seconds, synchronize clocks.
SSO_ORIGIN_NOT_ALLOWED403Browser Origin not registeredCompare scheme, hostname, and port exactly.
SSO_REDIRECT_NOT_ALLOWED403Destination origin invalid/unregisteredSign a configured Nanaade workspace origin.
SSO_MEMBERSHIP_REQUIRED403Roster-only tenant has no matching membershipPre-provision and activate the membership.
SSO_MEMBERSHIP_INACTIVE403Target membership is invited, suspended, or revokedCorrect its lifecycle state; do not create a duplicate.
SSO_PORTAL_RETURN_NOT_ALLOWED403Portal return URL is absent, invalid, or not the submitting allowed originSign an absolute URL on the registered portal origin.
SSO_LAUNCH_CODE_REQUIRED400Assertion has no launch codeSend a documented code for the user-selected module action.
SSO_LAUNCH_CODE_INVALID400Code is not in Nanaade's server registryCorrect the integration; never send a route or feature name as a substitute.
SSO_LAUNCH_CONTEXT_INVALID400Deep-link context is missing or unsafeSend only the required Nanaade record identifier.
SSO_LAUNCH_FEATURE_NOT_LICENSED403Tenant requested a module/add-on it does not ownRemove the portal action or ask the tenant administrator about licensing.
SSO_LAUNCH_AUDIENCE_DENIED403Nanaade-derived user audience cannot use the moduleUse a launch intended for that user category.
SSO_LAUNCH_PATH_NOT_ALLOWED403Server-resolved destination is outside the integration namespaceAsk Nanaade administration to review the registered destination paths.
SSO_ASSERTION_REPLAYED409Nonce already consumed/missingGenerate a fresh random nonce for every launch.
SSO_SUBJECT_MISMATCH409Membership bound to another subjectCorrect the source identity; do not overwrite binding.
SSO_TENANT_TRANSFER_REQUIREDBrowser redirectUser is active under another sponsored tenantLet the user request transfer, contact support, or return to the portal.
SSO_CONFLICT_TOKEN_INVALID400Conflict/return link expired or was alteredStart a fresh SSO launch.
SSO_TRANSFER_CONTEXT_CHANGED409Membership changed after conflict detectionStart a fresh launch or contact support.
SSO_REPLAY_STORE_UNAVAILABLE503Production nonce store unavailableWait for recovery; do not bypass replay protection.
FEATURE_NOT_LICENSED403Module/add-on not grantedTenant admin reviews licensing; do not loop SSO.
RESUME_REQUIRED422The operation needs a parsed or Nanaade-built resumeLet Nanaade open its upload/builder flow; retry only after processing completes.
JOB_ANALYSIS_REQUIRED422Applying or viewing a dependent result requires a completed job matchOpen the resume match action for the selected job.
ACADEMIC_PROFILE_REQUIRED422Career Pathway lacks field of study or current academic yearAsk the user to complete the Nanaade academic-profile step.
CAREER_PROFILE_REQUIRED422Career roles and/or skill ratings have not been completedResume the Career Pathway setup flow.
JOB_NOT_FOUND404The requested Nanaade job no longer exists or is unavailableReturn to Job Board and choose an active job.
INTERVIEW_SKILLS_REQUIRED422Skills-based interview started without any selected skillsAsk the user to select at least one skill.
TENANT_USAGE_LIMIT_REACHED429Organization reached a monthly provider-meter limitWait for reset or ask the tenant administrator to revise the limit.
MEMBER_DAILY_LIMIT_REACHED429User reached their daily meter allowanceWait until the next day or contact the tenant administrator.
MEMBER_HOURLY_LIMIT_REACHED429User reached their hourly meter allowanceWait until the next hour or contact the tenant administrator.
TENANT_USAGE_CHECK_UNAVAILABLE503Nanaade could not safely verify a cost ceilingRetry later; cost protection fails closed.

Administrative credential operations may also report SSO_CREDENTIAL_EXISTS, SSO_CREDENTIAL_NOT_FOUND, or SSO_ENCRYPTION_NOT_CONFIGURED. These are Nanaade administrator/operations concerns, not errors your public portal should attempt to repair.

Data prerequisite response

Missing user data is not an authentication failure and not a licensing failure. Nanaade returns 422 Unprocessable Entity with a stable prerequisite code:

HTTP/1.1 422 Unprocessable Entity
Content-Type: application/json
{
  "success": false,
  "status": "failed",
  "code": "RESUME_REQUIRED",
  "prerequisite": "resume",
  "feature": "job-board.resume-scoring",
  "message": "Add or build your resume before using this feature.",
  "action": {
    "type": "navigate",
    "href": "/dashboard/resume",
    "label": "Add resume"
  }
}

Nanaade's hosted module UI handles this response and presents the correct branded recovery flow. If your portal calls a documented API directly, branch on code, show a human-friendly explanation, and let the user return to the original portal path. Do not retry automatically while the prerequisite remains missing.

Diagnose a signature failure

Verify in this order:

  1. Client ID and secret come from the same environment/credential issue.
  2. The secret has no accidental whitespace or quotes.
  3. Payload is base64url(UTF8(JSON.stringify(assertion))).
  4. HMAC message is the encoded payload string.
  5. Digest output uses Base64URL, not hexadecimal or standard Base64.
  6. The payload is not modified after signing.

Diagnose an origin failure

In browser developer tools, inspect the request's Origin header. Compare only the exact scheme, host, and port to Nanaade configuration. A page URL path is irrelevant; a proxy that rewrites hosts may not be.

Diagnose a membership failure

Confirm the client ID belongs to the expected tenant, the target membership is active when one exists, normalized assertion email matches first binding, and the stable subject has not changed. For JIT tenants, also confirm that first launches include name. A successful login to your own portal proves identity only when your backend—not the browser—creates and signs the assertion.

Contacting support

Provide request ID, UTC timestamp, stable error code, client ID (or last characters), environment, expected destination, and whether the failure affects all users. Never provide the secret, full assertion, signature, session cookie, or user password.