The Export Schema
Every Docketstone firm can generate a complete export from inside the product: every record, every document file, every ledger entry, and the full audit chain, in the open format documented on this page. A platform you can leave is a platform you can trust arriving at. This page is the contract.
Archive layout
docketstone-export-YYYYMMDD-HHMMSS.zip ├── manifest.json # schema version, conventions, per-file row counts + SHA-256 ├── data/*.json # one JSON array per record type └── files/ ├── documents/ # every stored file, named {id}_{original_filename} └── bundles/ # every built court bundle PDF
Conventions
- Money is always an integer in US cents (
amount_cents: 150000= $1,500.00). Floats never touch client money, in the product or the export. - Dates are ISO 8601; timestamps are UTC.
- IDs are integer primary keys;
*_idfields reference theidin the named file. - Soft-deleted records are included, marked by
deleted_at— the export hides nothing. - Every data file's SHA-256 appears in the manifest; every document file's hash was recorded at upload.
What's inside
data/firm.json · data/users.json
Firm identity and staff (roles, bar numbers, rates). Password hashes and session tokens are never exported.
data/clients.json · data/client_aliases.json
Clients with contact detail and status, plus the AKA/FKA/DBA and corporate-family aliases that feed conflict checking.
data/matters.json · data/matter_parties.json
Matters with per-firm numbers, practice areas, responsible attorneys, and lifecycle dates; adverse parties, co-parties, opposing counsel, and witnesses per matter.
data/tasks.json · data/deadlines.json
Task assignments with priorities and completion attribution; deadlines typed (court date, filing, statute of limitations, discovery) with criticality and completion history.
data/time_entries.json · data/invoices.json · data/payments.json
Time with the rate captured at entry and the computed amount; invoices with status lifecycle; payments with source — including trust-funded payments linked to their ledger disbursement.
data/trust_accounts.json · data/trust_ledger_entries.json · data/reconciliations.json
The append-only trust ledger with signed cent amounts, reversal links, and per-statement cleared markers, plus every three-way reconciliation with the full bank-to-book bridge. Balances are recomputable from the entries alone.
data/conflict_checks.json · data/intake_submissions.json
Every conflict check ever run, with the names searched and a snapshot of every hit (source, method, similarity) as they appeared at check time; the complete intake pipeline with dispositions.
data/documents.json · data/signature_requests.json
Document metadata — versions, privilege classification, upload hashes — pointing at the actual files in files/documents/; e-signature requests with their complete per-event audit trails (IP and user agent per event).
data/bundles.json · data/bundle_items.json
Court bundle definitions, section ordering, build histories with page counts and output hashes; the built PDFs ship in files/bundles/.
data/ethical_walls.json · data/wall_events.json
Screening walls with reasons and lifecycle, and every blocked access attempt with path and IP.
The audit chain — verifiable without us
data/audit_logs.json contains the complete tamper-evident audit trail including each row's prev_hash and row_hash, so its integrity can be verified offline, by anyone, with no Docketstone software:
row_hash = sha256(join("|", [prev_hash, firm_id, user_id, event,
auditable_type, auditable_id, summary,
changes, ip, created_at]))
# nulls join as empty strings
# created_at is "YYYY-MM-DD HH:MM:SS.ffffff"
# the first row's prev_hash is "docketstone-audit-genesis"
# walk rows in id order: any altered, inserted, or removed row
# breaks every link after it
Versioning
schema_version in the manifest follows this page. Additive changes bump the minor version; anything that changes the meaning of an existing field bumps the major version and is announced before it ships.