docusealco/docuseal · error · Error
KBA Start Failed
Error message
KBA Start Failed
What it means
Catch-all for a KBA start that failed at the provider level: result.action === 'FAIL' with detail missing or anything other than 'NO MATCH'. The provider returned a structured failure (for example questions unavailable, account misprovisioned, policy refusal) and detail, when present, carries the provider's reason string. The generic 'KBA Start Failed' message means detail was empty.
Source
Thrown at app/javascript/submission_form/kba_step.vue:510
payload.phone = payload.phone.replace(/^\+1/, '')
}
const resp = await fetch(this.baseUrl + '/api/kba', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify(payload)
})
const data = await resp.json()
if (!resp.ok) throw new Error(data.error || 'Failed to start KBA')
if (data.result && data.result.action === 'FAIL') {
if (data.result.detail === 'NO MATCH') {
throw new Error('Unfortunately, we were unable to start Knowledge Based Authentication with the details provided. Please review and confirm that all your personal details are correct.')
}
throw new Error(data.result.detail || 'KBA Start Failed')
}
if (data.output && data.output.questions && data.output.questions.questions) {
this.questions = data.output.questions.questions
this.token = data.continuations.questions.template.token
this.reference = data.meta.reference
this.questions.forEach(q => {
this.answers[q.id] = null
})
this.startCountdown()
} else {
throw new Error('Invalid KBA response')
}
} catch (e) {
this.error = e.message
} finally {View on GitHub (pinned to 004a22c1c8)
Solutions
- Capture and surface data.result.detail (in logs or the thrown message) - it is the provider's stated reason.
- Check the KBA account status and entitlements for the environment behind baseUrl.
- Retry once for transient provider degradation; persistent FAIL indicates configuration.
- Compare the start payload against the provider's current API schema for newly required fields.
Example fix
// before
throw new Error(data.result.detail || 'KBA Start Failed')
// after
throw new Error(data.result.detail ? `KBA Start Failed: ${data.result.detail}` : 'KBA Start Failed') Defensive patterns
Strategy: try-catch
Type guard
const kbaStartFailed = (data) => data?.result?.action === 'FAIL' && data?.result?.detail !== 'NO MATCH'
Try / catch
try {
await this.startKba()
} catch (e) {
this.error = e.message
// capture the provider detail for diagnostics
telemetry.captureMessage(`KBA start failed for field ${this.field.uuid}`)
} Prevention
- Handle every documented FAIL detail code explicitly
- Log provider detail strings for trend analysis
- Keep provider credentials and entitlements current
When it happens
Trigger: Provider returns FAIL with a detail like 'QUESTIONS UNAVAILABLE' or an empty detail; the KBA account is not entitled in this environment; provider-side degradation during incidents; requests that pass HTTP validation but fail the provider's business rules.
Common situations: Newly provisioned KBA account without production entitlements; provider maintenance windows; bureau does not cover the subject's region or profile.
Related errors
- Failed to start KBA
- Unfortunately, we were unable to start Knowledge Based Authe
- Invalid KBA response
- Knowledge Based Authentication Failed
- Failed to submit answers
AI-assisted analysis of docusealco/docuseal@004a22c1c8 (2026-08-21).
Data as JSON: /api/errors/7737551c25130c29.
Report an issue: GitHub.