Developers

Training records (xAPI)

Assessments and instructor reviews export as xAPI 1.0.3 statements and as flat CSV, written to files so they can cross an air gap on approved media.

Export#

aarcv export-records --out records/ --pilot PILOT-01 --since 2026-10-01
# records/statements.json, records/records.csv, records/manifest.json (with hashes)

# optionally push to a Learning Record Store inside the enclave
AARCV_LRS_PASSWORD=... aarcv export-records --out records/ --lrs-url https://lrs.local/xapi --lrs-user aarcv

The same exports are available over HTTP: GET /api/export/xapi, GET /api/export/records.csv and GET /api/export/package.zip.

Statements#

  • One completed statement (http://adlnet.gov/expapi/verbs/completed) per scored sortie, carrying the overall and category scores.
  • One scored statement (http://adlnet.gov/expapi/verbs/scored) per instructor review, recording the instructor's call.

Statement IDs are derived from the sortie, reviewer and content, so re-exporting the same record is idempotent at the LRS and a changed review gets a new ID. Pilots are identified only by pilot ID as an xAPI account, never by name or email. Every export carries the configured classification banner.

CSV columns#

One row per sortie and category:

record_id, sortie_id, pilot_id, date, receiver, tail, label, category, weight,
auto_score, instructor_score, final_score, instructor_agrees, reviewer, comment,
overall_score, grade, contacts, contact_time_s, events_total, events_warning_or_worse,
model_release, classification

Column mapping to a specific system of record is agreed with the program office at transition.

Proficiency records between units#

Separate from xAPI, a unit can export a signed, portable proficiency record for one pilot (POST /api/record/export). The receiving unit trusts the sender's key (POST /api/record/trust), verifies and imports the record, and links it to its own aircrew entry. Scores and plans travel; video never does.

Was this page helpful?