Skip to content

Bulk CSV schema

The bulk endpoint accepts a CSV with one row per (student, term). Columns marked per-student must be identical across every row for the same student_id; the API rejects the student row group otherwise.

Identity

Column Type Required Notes
student_id string optional Rows are grouped by this value. If omitted, auto-assigned as row:<N> (1-based input position).

Per-student columns

Column Type Required Allowed values Notes
dependency_status string yes dependent, independent
degree_level string yes (default undergraduate) undergraduate, graduate, professional
grade_level string yes for undergraduate; blank for graduate/professional first_year, second_year, third_year_and_beyond
subsidized_amount integer ≥ 0 no (default 0) The subsidized portion of the annual limit. Must not exceed the statutory subsidized max for the tier.
plus_denied boolean no (default false) true, false, 1, 0 (case-insensitive) Set true for dependent undergraduates whose parents were denied a PLUS loan.
is_legacy_borrower boolean no (default false) true, false, 1, 0 Only valid for graduate/professional.
cost_of_attendance integer required when is_legacy_borrower=true Must be greater than $20,500.
total_limit integer > 0 optional Institutional program limit per §685.203(m)(2).

Per-term columns

Column Type Required Notes
term_label string yes Appears in the response.
term_ft_credits number > 0 yes (default 12) Full-time credit standard for this term.
term_credits_enrolled number > 0 yes (default 12) Student's enrolled credits.
term_actual_final_credits number ≥ 0 optional Set when reconciling after an enrollment change.
term_prior_disbursement_sub integer ≥ 0 optional Dollar amount of subsidized loan already disbursed for this term.
term_prior_disbursement_unsub integer ≥ 0 optional Same for unsubsidized.
term_prior_disbursement_grad_plus integer ≥ 0 optional Same for Grad PLUS (legacy borrowers only).

Sample template

Download the canonical column order: sample_bulk_template.csv.

Output columns

The response CSV has these columns in order: student_id, term_label, term_enrollment_status, term_equal_subsidized, term_equal_unsubsidized, term_equal_grad_plus, term_proportional_subsidized, term_proportional_unsubsidized, term_proportional_grad_plus, annual_ft_credits, reduced_annual_pct, total_equal_subsidized, total_equal_unsubsidized, total_equal_grad_plus, total_proportional_subsidized, total_proportional_unsubsidized, total_proportional_grad_plus, error.

The error column is empty on success. When non-empty, every other column is empty for that row, and the row carries a single error for the student row group.