{"record":{"id":"9f848c9ddb8b48f7","repo":"docusealco/docuseal","slug":"knowledge-based-authentication-failed","errorCode":null,"errorMessage":"Knowledge Based Authentication Failed","messagePattern":"Knowledge Based Authentication Failed","errorType":"exception","errorClass":"Error","httpStatus":null,"severity":"error","filePath":"app/javascript/submission_form/kba_step.vue","lineNumber":565,"sourceCode":"          body: JSON.stringify({\n            token: this.token,\n            answers: formattedAnswers,\n            reference: this.reference,\n            submitter_slug: this.submitterSlug\n          }),\n          headers: { 'Content-Type': 'application/json' }\n        })\n\n        const data = await resp.json()\n\n        if (data.result?.action !== 'PASS') {\n          if (data.result?.issues?.length) {\n            this.error = `Knowledge Based Authentication Failed - make sure you provide correct details for the Knowledge Based authentication: ${data.result.issues.join(', ')}`\n          } else {\n            this.error = 'Knowledge Based Authentication Failed - make sure you provide correct answers for the Knowledge Based authentication.'\n          }\n\n          throw new Error('Knowledge Based Authentication Failed')\n        }\n\n        if (!resp.ok) {\n          this.error = 'Failed to submit answers'\n\n          throw new Error('Failed to submit answers')\n        }\n\n        return resp\n      } finally {\n        this.isSubmitting = false\n      }\n    }\n  }\n}\n</script>\n","sourceCodeStart":547,"sourceCodeEnd":582,"githubUrl":"https://github.com/docusealco/docuseal/blob/004a22c1c88109c7ba0b567df011a8cb13894001/app/javascript/submission_form/kba_step.vue#L547-L582","documentation":"After answers are POSTed to /api/kba/{field.uuid}, the response's result.action is not 'PASS': the quiz answers did not meet the provider's pass threshold. When result.issues is a non-empty array its entries are appended to the visible error text. The thrown 'Knowledge Based Authentication Failed' is the signal that this verification attempt failed at the business level.","triggerScenarios":"Too many incorrect answers; submitting after the countdown expired so the session auto-failed; reusing a token from a previous session; provider returns result.issues listing the failed criteria.","commonSituations":"Legitimate signers misremembering historical details (old addresses, loans); deliberate impostor attempts; slow users hitting the time limit and submitting a dead session.","solutions":["Have the submitter start a fresh KBA session and answer carefully - note that providers cap retry attempts.","Enforce the countdown client-side so users cannot submit expired sessions.","Surface data.result.issues to the signer or support for the exact failure criteria.","If retries are exhausted, fall back to an alternate verification method or manual review."],"exampleFix":null,"handlingStrategy":"retry","validationCode":"if (this.questions.some((q) => this.answers[q.id] == null)) {\n  this.error = 'Please answer all questions before submitting.'\n  return\n}\nif (this.timeLeft <= 0) {\n  this.error = 'Time has expired, please restart verification.'\n  return\n}","typeGuard":null,"tryCatchPattern":"try {\n  await this.submit()\n} catch (e) {\n  this.error = e.message // already includes issues detail; let the user restart the flow\n}","preventionTips":["Require all answers before enabling submit","Disable submit when the countdown reaches zero","Track attempt counts against provider retry limits"],"tags":["kba","identity-verification","quiz-failure"],"backgroundTag":"identity-verification-failed","analyzedSha":"004a22c1c88109c7ba0b567df011a8cb13894001","analyzedAt":"2026-08-21T13:38:23.343Z","schemaVersion":2},"datasetVersion":"2026-08-21T18:17:14.833Z"}