FINRA OATS
The FINRA Order Audit Trail System (OATS) is the US equity and options market regulatory reporting regime that captures order events from receipt through execution, modification, and cancellation. OATS underpins FINRA's market surveillance and complements the Consolidated Audit Trail (CAT) introduced under SEC Rule 613. Falcon Veritas Intelligence (FVI) provides a unified OATS and CAT reporting pipeline that operates against your reconciled order book, with full lineage from the originating ticket to the venue fill.
Scope and applicability
OATS reporting applies to FINRA member firms that receive, route, or execute orders in:
- NASDAQ-listed and OTC equity securities
- Listed options on US exchanges
- OTC bulletin board (OTCBB) and pink sheet securities
Firms with daily order volumes above the FINRA-defined threshold must report via the OATS system itself; smaller firms may be exempt but should still capture OATS-equivalent records for FINRA examination readiness. FVI's OATS module operates in both modes and applies the appropriate submission profile based on the tenant's FINRA registration class.
The reporting deadline is end-of-day T+1 for execution events and end-of-day T+0 for the originating new-order event. FVI's OATS submission job runs at 23:30 ET nightly to capture all same-day events with a 30-minute buffer.
Field mapping
OATS captures order events across the full lifecycle. The 60+ actionable OATS fields break down into:
-
Order Received Date/Time — formatted in Eastern Time at millisecond precision. FVI's
orders.received_atcolumn is normalized to UTC internally but converted to ET at the submission boundary. -
Order ID — must be unique per firm and traceable across events. FVI's order book enforces uniqueness via a 128-bit ID and threads all events under a single
parent_order_id. -
Symbol — must match the official FINRA symbol list. FVI's symbol resolver pulls from the FINRA symbology file and the NASDAQ symbol master, with conflict resolution favoring the active listing venue.
-
Route venue — must use the Market Participant Identifier (MPID) format. FVI maintains a tenant-level MPID whitelist and rejects submissions with unknown MPIDs.
-
Execution timestamp and price — captured per fill, with venue-specific microsecond precision. FVI normalizes timestamps to ET and applies the FINRA-defined DST rules.
How FVI supports OATS
FVI treats OATS reporting as a downstream consumer of the order ledger. The match engine pairs order tickets from your OMS with execution reports and clearing confirmations, producing a canonical order state. The OATS reporting pipeline then enriches each event with FINRA-mandated fields, performs client-side validation against the FINRA OATS Technical Specifications, and submits via FINRA's secure transport.
Step-by-step: enabling OATS reporting
-
Register the tenant. In FVI, navigate to Settings → Compliance → FINRA and enter the firm CRD number, the relevant MPIDs, and the OATS submission profile (full or exempt). FVI validates the CRD against the FINRA Gateway.
-
Configure firm identifiers. Add MPIDs, clearing firm numbers, and executing broker designations. FVI applies these to the appropriate order events.
-
Map venue and routing flows. Connect each OMS, EMS, drop-copy feed, and prime broker to FVI's ingestion pipeline. FVI normalizes FIX 4.2/4.4 and FIXML into the canonical order record.
-
Configure timestamps. FVI captures all timestamps at UTC internally. Set your OMS time source and the venue reference clocks to ensure accurate conversion.
-
Run a dry-run. FVI's compliance console supports a 7-day dry-run submission to the FINRA OATS sandbox. Review the validation report and iterate on the field mapping.
-
Enable production submission. Once dry-run validation passes, flip the tenant to live. FVI begins the T+1 morning submission window (post-2024 FINRA OATS deadline).
-
Monitor acknowledgements. FVI polls FINRA OATS for ACK/NACK responses and surfaces unresolved validation errors as exceptions in the analyst queue.
Code samples
curl
curl -X POST https://api.falconveritas.com/v1/compliance/oats/submissions \
-H "Authorization: Bearer $FVI_JWT" \
-H "Content-Type: application/json" \
-d '{
"tenantId": "'$FVI_TENANT_ID'",
"crd": "12345",
"mpid": "ABCD",
"fromDate": "2026-08-01",
"toDate": "2026-08-22",
"idempotencyKey": "oats-fvi-$RANDOM"
}'
TypeScript
import { FVI } from '@falconveritas/sdk';
const fvi = new FVI({
baseUrl: 'https://api.falconveritas.com',
bearer: process.env.FVI_JWT!,
tenantId: process.env.FVI_TENANT_ID!,
});
const submission = await fvi.compliance.oats.submit({
crd: '12345',
mpid: 'ABCD',
fromDate: '2026-08-01',
toDate: '2026-08-22',
});
console.log('Submission ID:', submission.id);
Python
from falconveritas import FVI
client = FVI(
bearer=os.environ["FVI_JWT"],
tenant_id=os.environ["FVI_TENANT_ID"],
)
submission = client.compliance.oats.submit(
crd="12345",
mpid="ABCD",
from_date="2026-08-01",
to_date="2026-08-22",
)
print("Submission ID:", submission.id)
Troubleshooting
- Common Compliance errors
- RLS denied on cross-tenant reads
- Performance issues for large compliance jobs
- API error codes
Related articles
Last updated: 2026-08-22 · Page owner: Documentation · Source: src/lib/compliance/oats/.