Skip to main content
Tracer maintains a complete, immutable audit trail of all validation decisions. This guide explains how the audit system works and how to query validation history for compliance reporting.

Compliance overview

Tracer is designed to meet the audit requirements of financial regulations including:
RegulationRequirementHow Tracer complies
SOX (Sarbanes-Oxley)Complete audit trail of financial decisionsEvery validation is recorded with full context
GLBA (Gramm-Leach-Bliley)Protection of customer financial dataData encrypted at rest and in transit
General auditAbility to reconstruct decisionsImmutable records with input/output snapshots

Audit trail architecture

What gets recorded

Every validation creates an immutable audit record containing:
DataDescription
Request snapshotComplete input payload as received
Response snapshotFull response including decision and details
DecisionALLOW, DENY, or REVIEW
ReasonWhy the decision was made
Evaluated rulesAll rules that were evaluated
Matched rulesRules that triggered (if any)
Limit detailsUsage information for checked limits
Processing timeHow long validation took
TimestampWhen the validation occurred

Immutability guarantees

Audit records are write-once:
  • Records cannot be modified after creation
  • Records cannot be deleted (except by retention policy)
  • Each record has a unique validation ID for reference
The audit trail is designed for compliance audits. You can reconstruct exactly what happened for any validation, even years later.

Data retention

Retention periods

Data typeRetention periodReason
Validation records7 years minimumSOX/GLBA compliance requirement
Rules (active/inactive)IndefiniteOperational continuity
Rules (deleted)Not retainedPermanently removed
LimitsIndefiniteOperational continuity
Application logs90 daysDebugging and troubleshooting

Compliance considerations

  • SOX requirement: Maintain records for 7 years from the date of the audit report
  • GLBA requirement: Retain records demonstrating compliance with privacy rules
  • Data export: Records can be exported for external audit systems

Querying validation history

Use the GET /v1/validations endpoint to query historical validations.

Basic query

GET /v1/validations
X-API-Key: {api_key}
Returns the most recent validations (last 90 days by default).

Filtered query

GET /v1/validations?startDate=2026-01-01T00:00:00Z&endDate=2026-01-31T23:59:59Z&decision=DENY
X-API-Key: {api_key}

Available filters

ParameterTypeDescription
startDateRFC3339Start of date range (inclusive)
endDateRFC3339End of date range (exclusive)
decisionenumFilter by ALLOW, DENY, or REVIEW
accountIdUUIDFilter by account
segmentIdUUIDFilter by segment
portfolioIdUUIDFilter by portfolio
transactionTypeenumFilter by CARD, WIRE, PIX, CRYPTO
matchedRuleIdUUIDFilter by rule that matched
exceededLimitIdUUIDFilter by limit that was exceeded

Date format requirement

Date parameters must use RFC3339 format with mandatory timezone. Date-only formats are rejected.
Valid:
startDate=2026-01-01T00:00:00Z
startDate=2026-01-01T00:00:00-03:00
Invalid:
startDate=2026-01-01  (rejected - missing time and timezone)

Pagination

Results are paginated using cursor-based pagination:
GET /v1/validations?limit=100
Response includes a cursor for the next page:
{
  "data": [...],
  "nextCursor": "eyJpZCI6Imxhc3QtaWQifQ==",
  "hasMore": true
}
To get the next page:
GET /v1/validations?cursor=eyJpZCI6Imxhc3QtaWQifQ==
ParameterDefaultMaximumDescription
limit1001000Results per page
cursor--Pagination cursor from previous response
When using cursor pagination, you cannot change sortBy or sortOrder. These are fixed from the original query.

Sorting

GET /v1/validations?sortBy=createdAt&sortOrder=DESC
ParameterOptionsDefault
sortBycreatedAt, processingTimeMscreatedAt
sortOrderASC, DESCDESC

Getting validation details

Retrieve complete details for a specific validation:
GET /v1/validations/{validationId}
X-API-Key: {api_key}

Response

{
  "validationId": "val-uuid-123",
  "requestId": "client-request-uuid",
  "decision": "DENY",
  "reason": "limit_exceeded",
  "request": {
    "transactionType": "CARD",
    "subType": "debit",
    "amount": 800000,
    "currency": "BRL",
    "timestamp": "2026-01-30T10:30:00Z",
    "account": {
      "accountId": "acc-uuid-123",
      "type": "checking",
      "status": "active"
    },
    "segment": {
      "segmentId": "segment-uuid-456"
    },
    "merchant": {
      "merchantId": "merchant-uuid-789",
      "category": "5411",
      "country": "BR"
    }
  },
  "response": {
    "decision": "DENY",
    "reason": "limit_exceeded",
    "matchedRuleIds": [],
    "evaluatedRuleIds": ["rule-1", "rule-2", "rule-3"],
    "limitUsageDetails": [
      {
        "limitId": "limit-uuid-123",
        "limitAmount": 5000000,
        "currentUsage": 4500000,
        "exceeded": true
      }
    ]
  },
  "processingTimeMs": 18,
  "createdAt": "2026-01-30T10:30:00.123Z"
}
This record contains everything needed to understand:
  • What was the input (complete request snapshot)
  • What was the output (complete response snapshot)
  • Why the decision was made
  • Which rules were evaluated and matched
  • Which limits were checked

Compliance reporting scenarios

Scenario 1: Audit investigation

“Why was this transaction denied on January 15th?”
GET /v1/validations/{validationId}
The response shows the exact request received, all rules evaluated, which rule or limit caused the denial, and the timestamp.

Scenario 2: Monthly compliance report

“Show all denied transactions for corporate accounts in January”
GET /v1/validations?startDate=2026-01-01T00:00:00Z&endDate=2026-02-01T00:00:00Z&decision=DENY&segmentId=corporate-segment-uuid&limit=1000

Scenario 3: Rule effectiveness analysis

“Which transactions were denied by a specific fraud rule?”
GET /v1/validations?matchedRuleId=fraud-rule-uuid&decision=DENY&limit=1000

Scenario 4: Limit utilization review

“Which transactions exceeded spending limits this month?”
GET /v1/validations?startDate=2026-01-01T00:00:00Z&endDate=2026-02-01T00:00:00Z&exceededLimitId=daily-limit-uuid

Best practices for compliance

Record keeping

  • Store validation IDs in your transaction records for easy cross-reference
  • Log the requestId you send to Tracer for correlation
  • Export regularly if you need records in external audit systems

Audit preparation

  • Test queries before audit season to ensure you can retrieve needed data
  • Verify date ranges work correctly with your timezone requirements
  • Document your retention policy alignment with Tracer’s 7-year retention

Investigation workflow

When investigating a specific transaction:
  1. Find the validation ID from your transaction logs or Tracer history
  2. Retrieve full details using GET /v1/validations/
  3. Review the request snapshot to see what data was provided
  4. Check matched rules to understand why the decision was made
  5. Verify limit status if limits were involved

Fail-open behavior and audit

Tracer uses a configurable fail-open approach by default:
ScenarioDefault behaviorAudit record
No rules matchALLOWRecorded with reason “no_match”
Database temporarily unavailableALLOW with warningRecorded if possible; alert generated
Evaluation timeoutALLOW with warningRecorded with reason “timeout”
Fail-open behavior can be configured to fail-closed for high-security environments. Contact your administrator for configuration options.
All decisions, including those made during degraded operation, are recorded in the audit trail when possible. If a decision cannot be recorded (catastrophic failure), alerts are generated for manual review.

Quick reference

Validation history endpoint

OperationMethodEndpoint
List validationsGET/v1/validations
Get validationGET/v1/validations/{validationId}

Query parameters

ParameterTypeDescription
startDateRFC3339Start date (required timezone)
endDateRFC3339End date (required timezone)
decisionenumALLOW, DENY, REVIEW
accountIdUUIDFilter by account
segmentIdUUIDFilter by segment
portfolioIdUUIDFilter by portfolio
transactionTypeenumCARD, WIRE, PIX, CRYPTO
matchedRuleIdUUIDFilter by matched rule
exceededLimitIdUUIDFilter by exceeded limit
limitintegerResults per page (max 1000)
cursorstringPagination cursor
sortByenumcreatedAt, processingTimeMs
sortOrderenumASC, DESC

Retention summary

DataRetention
Validation records7+ years
Active rules/limitsIndefinite
Application logs90 days