Bulk importOnboarding starts with rosters

License-aware bulk roster import.

Institutional onboarding starts with rosters. ArthurAI™ supports bulk import of students and teachers via CSV and full course definitions via JSON. The import respects the institution’s license-quota posture: if the upload would exceed available seats, the import returns a structured 409 with a clear over-by count, and the institution can opt into partial acceptance via an explicit confirmation header. Student imports automatically trigger the LCP generation pipeline so cognitive profiling begins before first login.

Three import types
  • Student roster (CSV)

    First-name, last-name, email, date-of-birth, country code, learning-support flags, phone. Validated row-by-row with structured error reporting.

  • Teacher roster (CSV)

    First-name, last-name, email, role assignment, course assignment. Validated against existing institution role posture.

  • Full course (JSON)

    A complete course definition — packs, courses, lessons, practice — imported as one structured object. The shape mirrors the export format; round-trips are loss-free.

License-aware

Quota enforcement is a feature, not a refusal.

  • Quota gate at submit time

    If the upload would exceed available seats, the system returns HTTP 409 license_limit_exceeded with the exact over-by count. The institution is told the size of the gap before any partial action.

  • Opt-in partial acceptance

    The institution can resubmit with X-Confirm-Partial-Upload, accepting students up to the quota and surfacing the remainder for follow-up. The decision is explicit, not silent.

  • Async batched processing

    Ten rows in parallel; progress polled via job-status endpoint. A 1,000-row import does not block; the institution can navigate away and return.

  • Source-file archival

    Every original CSV and JSON is archived to tenant blob storage. Reprocessing is one operation, not a rebuild.

  • LCP pipeline auto-fires

    Student imports automatically trigger LCP question generation so cognitive profiling starts before first login. The student arrives to a ready instrument, not a placeholder.

Code is truth
  1. 01

    Three import types: CSV_STUDENT, CSV_TEACHER, COURSE_JSON.

  2. 02

    Student CSV fields: firstname, lastname, email, date-of-birth, country code, learning-support flags, phone.

  3. 03

    License-quota gate: returns HTTP 409 with license_limit_exceeded unless the caller passes X-Confirm-Partial-Upload header.

  4. 04

    Asynchronous batched processing: 10 rows in parallel; progress polled via job-status endpoint.

  5. 05

    Source-file archival: original CSV/JSON archived to tenant blob storage for audit and reprocessing.

  6. 06

    Student import auto-triggers LCP question generation queue so cognitive profiling starts before first login.