Skip to main content
Qscore fraud and identity is a product separate from the credit report. It returns a fraud-risk score: a higher value means higher fraud risk. The report combines the subject’s recent query velocity, verified-platform signals, contact consistency, shared device/IP evidence and available bureau coverage. It is designed for fraud prevention, identity verification and onboarding decisions; it is not a credit score.
This product is gated by the account’s risk service flag and charged with the fixed-only risk_fraud_score service. A failed generation is refunded automatically. The PDF and detailed signals are never sent by email.

Flow

Bureau coverage and THIN_FILE

The report can be ready with THIN_FILE when it has no personal bureau evidence for that assessment. This can happen after a successful fetch that returns zero records, including an HTTP 200 with sources_queried: 0. That response means that no consultable personal source was available (the response contained only bulk or unsupported sources), so it is treated as unavailable and may produce THIN_FILE. The same applies when the core explicitly returns 503 bureau_unavailable because no personal bureau source is configured. In that case, the PDF declares the personal bureau source as unavailable with zero records; platform signals may still contribute to the fraud score. When sources_queried > 0, the personal source answered the query but returned no evidence for the subject. This is still a valid fetch and may produce THIN_FILE. THIN_FILE is an evidence-coverage signal, not a clean, approved or low-risk decision. It describes the absence of personal bureau evidence, not the absence of internal platform history: internal signals may exist and still contribute to the score. The PDF’s sources table declares each functional source, its record count and freshness (live or unavailable). Persisted bureau records are never presented as fresh identity evidence when the on-demand fetch was unavailable. Earlier Source: open_finance records derived from consent links may not carry an ingest_run_id. They are not fresh personal bureau evidence, must not mark FetchedThisRun, and do not represent a personal fraud source. Failures are fail-closed: a non-empty sources_failed, transport or authentication failure, storage failure or invalid response contract does not produce a thin-file success. The existing generation recovery/refund path handles the charged report.

Create a report

POST /v1/qscore/fraud/reports is authenticated and requires a verified account. The idempotency key can be in the JSON body or in the Idempotency-Key header.
Create a fraud report
200 OK
A replay with the same account and key returns the original report with "idempotency_hit": true; it never charges or generates a second report.

Read the report

List

GET /v1/qscore/fraud/reports returns the reports visible to the caller. from and to are required date filters (YYYY-MM-DD, organization timezone, inclusive). status is optional. Pagination defaults to 50 and is capped at 200.
List fraud reports
200 OK

Detail

GET /v1/qscore/fraud/reports/{report_id} returns the same report metadata, reason codes and verification/PDF links when the report is ready. An ID that is not a UUID, does not belong to the caller’s scope or does not exist returns 404 not_found.

PDF

GET /v1/qscore/fraud/reports/{report_id}/pdf downloads the branded PDF with Content-Type: application/pdf and Content-Disposition: attachment; filename="qxrisk_fraud_<report_id>.pdf". The download is authenticated and is available only when the report is ready; otherwise the endpoint returns 404 not_found.

Score and statuses

The model is qscore-fraud-v1, ranges from 1 to 999 and uses the following fraud-risk bands: The implemented reason codes are NEW_SUBJECT, VELOCITY, CONTACT_MISMATCH, SHARED_DEVICE_IP and THIN_FILE. A missing internal age signal does not itself create NEW_SUBJECT; THIN_FILE is reported when personal bureau evidence is unavailable, even when internal platform signals are present.

Webhook and email

When the report completes, the account receives one signed risk_fraud_score_ready webhook:
risk_fraud_score_ready
The email is best-effort and branded for the organization. It contains only a short report reference, the subject document and a link to the account; it does not include the PDF, score, band or fraud signals.

Public authenticity verification

GET /verify/qscore-fraud/{code} is public and rate-limited. A valid code returns only authenticity, current status, issue date and issuer:
200 OK
An invalid or tampered code returns 404 with valid: false; the public endpoint never reveals the document, score or signals.

Errors

FAQ

No. This is a separate fraud and identity risk score. Higher values mean higher observed fraud risk; it must not be interpreted as creditworthiness.
No. The product always creates the full report, PDF and verification code.
No. Reuse the same idempotency key to replay the original result. Use a new key only when you intentionally start a new assessment.
No. It confirms authenticity without exposing the document, score or signals.
Last modified on October 3, 2026