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.