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
"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.
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 isqscore-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 signedrisk_fraud_score_ready webhook:
risk_fraud_score_ready
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
404 with valid: false; the public
endpoint never reveals the document, score or signals.
Errors
FAQ
Is this a credit score?
Is this a credit score?
No. This is a separate fraud and identity risk score. Higher values mean
higher observed fraud risk; it must not be interpreted as creditworthiness.
Can I generate a score-only response?
Can I generate a score-only response?
No. The product always creates the full report, PDF and verification code.
Does a retry charge twice?
Does a retry charge twice?
No. Reuse the same idempotency key to replay the original result. Use a new
key only when you intentionally start a new assessment.
Does the public verification page show the score?
Does the public verification page show the score?
No. It confirms authenticity without exposing the document, score or
signals.