Decision Logs
Every fraud decision is recorded permanently. The records exist for reconciliation: afterwards you read which decision a payment received, which rules matched, and which channel the decision came from.
GET /api/v1/fraud/decision-logs (list)
GET /api/v1/fraud/decision-logs/{traceId} (single)Authentication is the same as the Decision API: a bearer token carrying the fraud:view_decisions scope. Only your own account's records are returned — the tenant scope is resolved from the token.
List
Filters
| Parameter | Type | Meaning |
|---|---|---|
paymentId | string | The payment reference you sent in the decision request |
decision | string | allow · review · block · force_3d |
integrationMode | string | standalone for external callers |
productContext | string | The product surface (for example direct_api, payment_form) |
limit | number | Page size. Default 50, valid range 1–200 |
cursor | string | The pageInfo.nextCursor value of the previous response |
limit is a page size, not a ceiling. Pass the page size you want and fetch the following pages with cursor; you reach every record however many there are.
Paging
The order is newest first, and the sort key is the record's creation instant combined with its id — so two decisions created in the same millisecond are never skipped at a page boundary.
pageInfo is a sibling of data, not nested inside it:
{
"status": "success",
"code": "SUCCESS",
"data": [ { "traceId": "…" } ],
"pageInfo": {
"hasMore": true,
"nextCursor": "eyJ2IjoxLCJ0IjoiMjAyNi0xMC0wNVQwOToxMjo0MC4xMjM0NTZaIiwiaWQiOiIwMUo4WlUifQ",
"totalCount": null
},
"requestId": "req_01J8ZV..."
}- When
hasMoreisfalsethe list is exhausted. totalCountis alwaysnullon this endpoint: a total count is expensive and is not needed for paging.- The
cursoris opaque. Do not parse it; send it back verbatim. A corrupted cursor does not silently fall back to the first page — it returns400 INVALID_CURSOR.
The full platform paging contract: Pagination.
Single record
GET /api/v1/fraud/decision-logs/{traceId}You take traceId from the data.traceId field of the decision response. If you want to keep a reference to a decision, that is the only value you need to store.
Record fields
| Field | Meaning |
|---|---|
traceId | The decision's unique id; the value to quote in a support request |
decision | allow · review · block · force_3d |
score | Risk score |
reasonCodes | The reason codes that produced the decision |
matchedRules / matchedRuleGroups | Matched rules and rule groups |
flowPath | The flow nodes the decision passed through |
flowId / flowName / flowVersion | Id, name and version of the flow that decided |
explainabilityJson | Explainability summary and group results |
tags / actions | Tags attached to the decision and the actions that fired |
channel / surface / stage / operationKind | The request's channel taxonomy |
authModeRequested / authModeApplied | Requested and applied authentication mode |
integrationMode / productContext | Integration mode and product surface |
subMerchantRef | Sub-merchant reference, if you sent one |
transactionRef | Transaction reference, if you sent one |
assertionOutcome | Verification outcome of the identity artefact (on the merchant_form channel) |
paymentId / customerId | The references you sent in the request |
latencyMs | How long the decision took to produce |
createdAt | When the decision was created |
The record also carries the request that produced the decision. That is part of the audit trail: when asked why a decision was made, the context it was made with can be seen too.
Reading the decision for a payment
For payments taken through the Lunixi payment orchestrator, fraud already runs inside authorisation; you do not need to call evaluate separately. You read that payment's decision with the paymentId filter:
curl "https://api-gateway.lunixi.com/api/v1/fraud/decision-logs?paymentId=pi_123&limit=1" \
-H "Authorization: Bearer $LUNIXI_TOKEN"Next
- Decision API — request fields and the decision response
- Event Ingest API — feeding the rules that count
- Errors, repeated requests and retries