Skip to content

Billing API ​

Base URL: /api/v1/billing/

Manage tuition billing, fee configuration, payment plans, transactions, refund schedules, and student billing calculations.

Endpoints Overview ​

Settings ​

MethodEndpointDescription
GET/settingsList billing settings
POST/settingsCreate billing setting
GET/settings/{settingID}Get setting details
PATCH/settings/{settingID}Update setting
DELETE/settings/{settingID}Delete setting

Billing Methods ​

MethodEndpointDescription
GET/methodsList billing methods
POST/methodsCreate billing method
GET/methods/{methodID}Get method details
PATCH/methods/{methodID}Update method
DELETE/methods/{methodID}Delete method
GET/methods/{methodID}/configsList method configs
POST/methods/{methodID}/configsCreate method config
GET/methods/{methodID}/bandsList method bands
POST/methods/{methodID}/bandsCreate method band
GET/methods/{methodID}/credit_ratesList method credit rates
POST/methods/{methodID}/credit_ratesCreate method credit rate

Method Configs (standalone) ​

MethodEndpointDescription
GET/method-configsList all method configs
PATCH/method-configs/{configID}Update method config
DELETE/method-configs/{configID}Delete method config

Billing Bands (standalone) ​

MethodEndpointDescription
GET/bandsList all billing bands
PATCH/bands/{bandID}Update billing band
DELETE/bands/{bandID}Delete billing band

Credit Rates (standalone) ​

MethodEndpointDescription
GET/credit-ratesList all credit rates
PATCH/credit-rates/{rateID}Update credit rate
DELETE/credit-rates/{rateID}Delete credit rate

Fee Types ​

MethodEndpointDescription
GET/fee-typesList fee types
POST/fee-typesCreate fee type
GET/fee-types/{feeTypeID}Get fee type details
PATCH/fee-types/{feeTypeID}Update fee type
DELETE/fee-types/{feeTypeID}Delete fee type

Term Fees ​

MethodEndpointDescription
GET/term-feesList term fees
POST/term-feesCreate term fee
GET/term-fees/{termFeeID}Get term fee details
PATCH/term-fees/{termFeeID}Update term fee
DELETE/term-fees/{termFeeID}Delete term fee
GET/term-fees/{termFeeID}/bandsList term fee bands
POST/term-fees/{termFeeID}/bandsCreate term fee band
GET/term-fees/{termFeeID}/categoriesList term fee categories
POST/term-fees/{termFeeID}/categoriesCreate term fee category

Term Fee Bands (standalone) ​

MethodEndpointDescription
GET/term-fee-bandsList all term fee bands
PATCH/term-fee-bands/{bandID}Update term fee band
DELETE/term-fee-bands/{bandID}Delete term fee band

Term Fee Categories (standalone) ​

MethodEndpointDescription
GET/term-fee-categoriesList all term fee categories
PATCH/term-fee-categories/{categoryID}Update term fee category
DELETE/term-fee-categories/{categoryID}Delete term fee category
GET/term-fee-categories/{categoryID}/bandsList category bands
POST/term-fee-categories/{categoryID}/bandsCreate category band

Term Fee Category Bands (standalone) ​

MethodEndpointDescription
GET/term-fee-category-bandsList all category bands
PATCH/term-fee-category-bands/{bandID}Update category band
DELETE/term-fee-category-bands/{bandID}Delete category band

Payment Plans ​

MethodEndpointDescription
GET/payment-plansList payment plans
POST/payment-plansCreate payment plan
GET/payment-plans/{planID}Get payment plan details
PATCH/payment-plans/{planID}Update payment plan
DELETE/payment-plans/{planID}Delete payment plan
GET/payment-plans/{planID}/termsList plan terms
POST/payment-plans/{planID}/termsCreate plan term
GET/payment-plans/{planID}/eligibilityList plan eligibility rules
POST/payment-plans/{planID}/eligibilityCreate plan eligibility rule
GET/payment-plans/{planID}/feesList plan fees
POST/payment-plans/{planID}/feesCreate plan fee

Payment Plan Terms (standalone) ​

MethodEndpointDescription
GET/payment-plan-termsList all plan terms
PATCH/payment-plan-terms/{termID}Update plan term
DELETE/payment-plan-terms/{termID}Delete plan term

Payment Plan Eligibility (standalone) ​

MethodEndpointDescription
GET/payment-plan-eligibilityList all eligibility rules
PATCH/payment-plan-eligibility/{eligibilityID}Update eligibility rule
DELETE/payment-plan-eligibility/{eligibilityID}Delete eligibility rule

Payment Plan Fees (standalone) ​

MethodEndpointDescription
GET/payment-plan-feesList all plan fees
PATCH/payment-plan-fees/{feeID}Update plan fee
DELETE/payment-plan-fees/{feeID}Delete plan fee

Upfront Discounts ​

MethodEndpointDescription
GET/upfront-discountsList upfront discounts
POST/upfront-discountsCreate upfront discount
GET/upfront-discounts/{discountID}Get discount details
PATCH/upfront-discounts/{discountID}Update discount
DELETE/upfront-discounts/{discountID}Delete discount

Transactions ​

MethodEndpointDescription
GET/transactionsList transactions
POST/transactionsCreate transaction
GET/transactions/{transactionID}Get transaction details

Refund Schedules ​

MethodEndpointDescription
GET/refund-schedulesList refund schedules
POST/refund-schedulesCreate refund schedule
GET/refund-schedules/{scheduleID}Get schedule details
PATCH/refund-schedules/{scheduleID}Update schedule
DELETE/refund-schedules/{scheduleID}Delete schedule
GET/refund-schedules/{scheduleID}/entriesList schedule entries
POST/refund-schedules/{scheduleID}/entriesCreate schedule entry

Refund Schedule Entries (standalone) ​

MethodEndpointDescription
GET/refund-schedule-entriesList all schedule entries
PATCH/refund-schedule-entries/{entryID}Update schedule entry
DELETE/refund-schedule-entries/{entryID}Delete schedule entry

Student Billing ​

MethodEndpointDescription
GET/students/{studentID}/balance/{termID}Get student balance for term
GET/students/{studentID}/payment-plans/{termID}Get student payment plans for term
GET/students/{studentID}/transactionsList student transactions
GET/students/{studentID}/eligible-plans/{termID}Get eligible payment plans
POST/students/{studentID}/enroll-planEnroll student in payment plan
GET/students/{studentID}/payment-scheduleGet student payment schedule
GET/students/{studentID}/upfront-discount/{termID}Get upfront discount for term
GET/students/{studentID}/summaryGet student billing summary
POST/students/{studentID}/calculateCalculate billing for student
GET/students/{studentID}/statementGet student billing statement

Enrollments (Payment Plan) ​

MethodEndpointDescription
GET/enrollmentsList payment plan enrollments
GET/enrollments/{enrollmentID}Get enrollment details

Settings ​

List Settings ​

GET /api/v1/billing/settings

Returns all billing settings.

Success Response (200 OK) ​

json
{
  "count": 3,
  "results": [
    {
      "setting_id": 1,
      "setting_key": "DEFAULT_CURRENCY",
      "setting_value": "USD",
      "description": "Default currency for billing"
    }
  ]
}

TypeScript Types ​

typescript
interface BillingSetting {
  setting_id: number
  setting_key: string
  setting_value: string
  description: string | null
}

Create Setting ​

POST /api/v1/billing/settings

Request Body ​

FieldTypeRequiredDescription
setting_keystringYesUnique key (max 100)
setting_valuestringYesSetting value
descriptionstringNoDescription (max 500)

Update Setting ​

PATCH /api/v1/billing/settings/{settingID}

Request Body ​

FieldTypeRequiredDescription
setting_valuestringNoUpdated value
descriptionstringNoUpdated description

Billing Methods ​

List Methods ​

GET /api/v1/billing/methods

Returns all billing methods.

Success Response (200 OK) ​

json
{
  "count": 3,
  "results": [
    {
      "method_id": 1,
      "method_code": "UNDERGRAD_PERCREDIT",
      "name": "Undergraduate Per Credit",
      "description": "Standard per-credit billing for undergraduates",
      "method_type": "PER_CREDIT",
      "is_default": true,
      "is_active": true
    }
  ]
}

TypeScript Types ​

typescript
interface BillingMethod {
  method_id: number
  method_code: string
  name: string
  description: string | null
  method_type: 'PER_CREDIT' | 'FLAT_RATE' | 'BANDED' | 'CUSTOM'
  is_default: boolean
  is_active: boolean
}

interface BillingMethodDetail extends BillingMethod {
  created_at: string
  updated_at: string
  configs: BillingMethodConfig[]
}

interface BillingMethodConfig {
  config_id: number
  method_id: number
  config_key: string
  config_value: string
}

Get Method ​

GET /api/v1/billing/methods/{methodID}

Returns method details including configs.

Success Response (200 OK) ​

json
{
  "method_id": 1,
  "method_code": "UNDERGRAD_PERCREDIT",
  "name": "Undergraduate Per Credit",
  "method_type": "PER_CREDIT",
  "is_default": true,
  "is_active": true,
  "created_at": "2024-01-01T00:00:00Z",
  "updated_at": "2024-01-01T00:00:00Z",
  "configs": [
    {
      "config_id": 1,
      "method_id": 1,
      "config_key": "base_rate",
      "config_value": "500.00"
    }
  ]
}

Create Method ​

POST /api/v1/billing/methods

Request Body ​

FieldTypeRequiredDescription
method_codestringYesUnique code (max 50)
namestringYesDisplay name (max 200)
descriptionstringNoDescription (max 500)
method_typestringYesOne of: PER_CREDIT, FLAT_RATE, BANDED, CUSTOM
is_defaultbooleanNoDefault method flag
is_activebooleanNoActive status

Method Sub-resources ​

List Method Configs ​

GET /api/v1/billing/methods/{methodID}/configs

Create Method Config ​

POST /api/v1/billing/methods/{methodID}/configs
FieldTypeRequiredDescription
method_idintegerYesParent method ID
config_keystringYesConfig key (max 100)
config_valuestringYesConfig value

List Method Bands ​

GET /api/v1/billing/methods/{methodID}/bands

Create Method Band ​

POST /api/v1/billing/methods/{methodID}/bands
FieldTypeRequiredDescription
method_idintegerYesParent method ID
term_idintegerNoOptional term filter
residency_idintegerNoOptional residency filter
degree_level_idintegerNoOptional degree level filter
min_creditsdecimalYesMinimum credits
max_creditsdecimalYesMaximum credits
flat_amountdecimalYesFlat amount for band
per_credit_overagedecimalNoPer-credit rate above max
is_activebooleanNoActive status

List Method Credit Rates ​

GET /api/v1/billing/methods/{methodID}/credit_rates

Create Method Credit Rate ​

POST /api/v1/billing/methods/{methodID}/credit_rates
FieldTypeRequiredDescription
term_idintegerYesTerm ID
method_idintegerYesMethod ID
residency_idintegerNoOptional residency filter
degree_level_idintegerNoOptional degree level filter
rate_per_creditdecimalYesRate per credit hour
effective_datedatetimeYesEffective date
is_activebooleanNoActive status

TypeScript Types (Bands & Credit Rates) ​

typescript
interface BillingBand {
  band_id: number
  method_id: number
  term_id: number | null
  residency_id: number | null
  degree_level_id: number | null
  min_credits: string
  max_credits: string
  flat_amount: string
  per_credit_overage: string
  is_active: boolean
}

interface CreditRateSchedule {
  rate_id: number
  term_id: number
  method_id: number
  method_name: string
  residency_id: number | null
  degree_level_id: number | null
  rate_per_credit: string
  effective_date: string
  is_active: boolean
}

Fee Types ​

List Fee Types ​

GET /api/v1/billing/fee-types

Success Response (200 OK) ​

json
{
  "count": 10,
  "results": [
    {
      "fee_type_id": 1,
      "fee_code": "TUITION",
      "name": "Tuition",
      "description": "Standard tuition charge",
      "fee_category": "TUITION",
      "gl_account": "40-1000-1001",
      "is_refundable": true,
      "is_active": true
    }
  ]
}

TypeScript Types ​

typescript
interface FeeType {
  fee_type_id: number
  fee_code: string
  name: string
  description: string | null
  fee_category: 'TUITION' | 'COURSE_FEE' | 'LAB_FEE' | 'STUDENT_FEE' | 'OTHER'
  gl_account: string | null
  is_refundable: boolean
  is_active: boolean
}

Create Fee Type ​

POST /api/v1/billing/fee-types

Request Body ​

FieldTypeRequiredDescription
fee_codestringYesUnique code (max 50)
namestringYesDisplay name (max 200)
descriptionstringNoDescription (max 500)
fee_categorystringYesOne of: TUITION, COURSE_FEE, LAB_FEE, STUDENT_FEE, OTHER
gl_accountstringNoGL account code (max 50)
is_refundablebooleanNoWhether fee is refundable
is_activebooleanNoActive status

Term Fees ​

List Term Fees ​

GET /api/v1/billing/term-fees

Success Response (200 OK) ​

json
{
  "count": 25,
  "results": [
    {
      "term_fee_id": 1,
      "term_id": 10,
      "fee_type_id": 1,
      "fee_type_name": "Tuition",
      "amount": "500.00",
      "is_per_credit": true,
      "residency_id": null,
      "degree_level_id": null,
      "is_active": true
    }
  ]
}

TypeScript Types ​

typescript
interface TermFee {
  term_fee_id: number
  term_id: number
  fee_type_id: number
  fee_type_name: string
  amount: string
  is_per_credit: boolean
  residency_id: number | null
  degree_level_id: number | null
  is_active: boolean
}

interface TermFeeBand {
  band_id: number
  term_fee_id: number
  min_credits: string
  max_credits: string
  amount: string
}

interface TermFeeCategory {
  category_id: number
  term_id: number
  name: string
  description: string | null
  is_active: boolean
}

interface TermFeeCategoryBand {
  id: number
  category_id: number
  min_credits: string
  max_credits: string
  amount: string
}

Create Term Fee ​

POST /api/v1/billing/term-fees

Request Body ​

FieldTypeRequiredDescription
term_idintegerYesTerm ID
fee_type_idintegerYesFee type ID
amountdecimalYesFee amount
is_per_creditbooleanNoPer-credit fee
residency_idintegerNoResidency filter
degree_level_idintegerNoDegree level filter
is_activebooleanNoActive status

Payment Plans ​

List Payment Plans ​

GET /api/v1/billing/payment-plans

Success Response (200 OK) ​

json
{
  "count": 3,
  "results": [
    {
      "plan_id": 1,
      "plan_code": "MONTHLY4",
      "name": "4-Month Payment Plan",
      "description": "Split tuition over 4 monthly installments",
      "number_of_installments": 4,
      "down_payment_percentage": "25.00",
      "is_active": true
    }
  ]
}

Get Payment Plan ​

GET /api/v1/billing/payment-plans/{planID}

Returns full details including terms, eligibility rules, fees, and schedules.

Success Response (200 OK) ​

json
{
  "plan_id": 1,
  "plan_code": "MONTHLY4",
  "name": "4-Month Payment Plan",
  "number_of_installments": 4,
  "down_payment_percentage": "25.00",
  "is_active": true,
  "created_at": "2024-01-01T00:00:00Z",
  "updated_at": "2024-01-01T00:00:00Z",
  "terms": [
    {
      "id": 1,
      "plan_id": 1,
      "term_id": 10,
      "enrollment_deadline": "2024-08-15T00:00:00Z"
    }
  ],
  "eligibility": [
    {
      "id": 1,
      "plan_id": 1,
      "residency_id": null,
      "student_type_id": null,
      "min_credits": "12.00",
      "max_credits": null
    }
  ],
  "fees": [
    {
      "fee_id": 1,
      "plan_id": 1,
      "fee_type_id": 5,
      "fee_type_name": "Payment Plan Fee",
      "amount": "50.00",
      "is_per_installment": false
    }
  ],
  "schedules": [
    {
      "schedule_id": 1,
      "plan_id": 1,
      "installment_number": 1,
      "due_date_offset_days": 0,
      "percentage_of_balance": "25.00"
    }
  ]
}

TypeScript Types ​

typescript
interface PaymentPlan {
  plan_id: number
  plan_code: string
  name: string
  description: string | null
  number_of_installments: number
  down_payment_percentage: string
  is_active: boolean
}

interface PaymentPlanDetail extends PaymentPlan {
  created_at: string
  updated_at: string
  terms: PaymentPlanTerm[]
  eligibility: PaymentPlanEligibility[]
  fees: PaymentPlanFee[]
  schedules: PaymentPlanSchedule[]
}

interface PaymentPlanTerm {
  id: number
  plan_id: number
  term_id: number
  enrollment_deadline: string
}

interface PaymentPlanEligibility {
  id: number
  plan_id: number
  residency_id: number | null
  student_type_id: number | null
  min_credits: string | null
  max_credits: string | null
}

interface PaymentPlanFee {
  fee_id: number
  plan_id: number
  fee_type_id: number
  fee_type_name: string
  amount: string
  is_per_installment: boolean
}

interface PaymentPlanSchedule {
  schedule_id: number
  plan_id: number
  installment_number: number
  due_date_offset_days: number
  percentage_of_balance: string
}

Create Payment Plan ​

POST /api/v1/billing/payment-plans

Request Body ​

FieldTypeRequiredDescription
plan_codestringYesUnique code (max 50)
namestringYesDisplay name (max 200)
descriptionstringNoDescription (max 500)
number_of_installmentsintegerYesNumber of installments (>= 1)
down_payment_percentagedecimalNoDown payment as percentage
is_activebooleanNoActive status

Upfront Discounts ​

List Upfront Discounts ​

GET /api/v1/billing/upfront-discounts

Success Response (200 OK) ​

json
{
  "count": 2,
  "results": [
    {
      "discount_id": 1,
      "term_id": 10,
      "name": "Early Payment Discount",
      "discount_percentage": "5.00",
      "deadline": "2024-07-01T00:00:00Z",
      "is_active": true
    }
  ]
}

TypeScript Types ​

typescript
interface UpfrontPaymentDiscount {
  discount_id: number
  term_id: number
  name: string
  discount_percentage: string
  deadline: string
  is_active: boolean
}

Create Upfront Discount ​

POST /api/v1/billing/upfront-discounts

Request Body ​

FieldTypeRequiredDescription
term_idintegerYesTerm ID
namestringYesDiscount name (max 200)
discount_percentagedecimalYesDiscount percentage
deadlinedatetimeYesDeadline for discount
is_activebooleanNoActive status

Transactions ​

List Transactions ​

GET /api/v1/billing/transactions

Success Response (200 OK) ​

json
{
  "count": 100,
  "results": [
    {
      "transaction_id": 1,
      "student_id": 42,
      "term_id": 10,
      "transaction_type": "CHARGE",
      "transaction_date": "2024-08-01T00:00:00Z",
      "amount": "5000.00",
      "description": "Fall 2024 Tuition",
      "reference_number": "INV-2024-001",
      "fee_type_id": 1,
      "fee_type_name": "Tuition",
      "status_id": 1,
      "created_by": "admin",
      "created_at": "2024-08-01T00:00:00Z"
    }
  ]
}

TypeScript Types ​

typescript
interface Transaction {
  transaction_id: number
  student_id: number
  term_id: number
  transaction_type: 'CHARGE' | 'PAYMENT' | 'CREDIT' | 'REFUND' | 'ADJUSTMENT'
  transaction_date: string
  amount: string
  description: string
  reference_number: string | null
  fee_type_id: number | null
  fee_type_name: string
  status_id: number
  created_by: string | null
  created_at: string
}

interface TransactionDetail extends Transaction {
  updated_by: string | null
  updated_at: string
  items: BillingTransactionItem[]
}

interface BillingTransactionItem {
  item_id: number
  transaction_id: number
  description: string
  amount: string
  fee_type_id: number | null
  enrollment_id: number | null
  gl_account: string | null
}

Create Transaction ​

POST /api/v1/billing/transactions

Request Body ​

FieldTypeRequiredDescription
student_idintegerYesStudent ID
term_idintegerYesTerm ID
transaction_typestringYesOne of: CHARGE, PAYMENT, CREDIT, REFUND, ADJUSTMENT
transaction_datedatetimeYesTransaction date
amountdecimalYesAmount
descriptionstringYesDescription (max 500)
reference_numberstringNoReference number (max 100)
fee_type_idintegerNoFee type ID
status_idintegerYesStatus lookup ID
itemsarrayNoLine items

Transaction Item Fields ​

FieldTypeRequiredDescription
descriptionstringYesItem description (max 500)
amountdecimalYesItem amount
fee_type_idintegerNoFee type ID
enrollment_idintegerNoRelated enrollment ID
gl_accountstringNoGL account code (max 50)

Refund Schedules ​

List Refund Schedules ​

GET /api/v1/billing/refund-schedules

Success Response (200 OK) ​

json
{
  "count": 2,
  "results": [
    {
      "schedule_id": 1,
      "name": "Standard Refund Schedule",
      "term_id": null,
      "is_default": true,
      "is_active": true
    }
  ]
}

Get Refund Schedule ​

GET /api/v1/billing/refund-schedules/{scheduleID}

Returns schedule details including entries.

Success Response (200 OK) ​

json
{
  "schedule_id": 1,
  "name": "Standard Refund Schedule",
  "term_id": null,
  "is_default": true,
  "is_active": true,
  "created_at": "2024-01-01T00:00:00Z",
  "updated_at": "2024-01-01T00:00:00Z",
  "entries": [
    {
      "entry_id": 1,
      "schedule_id": 1,
      "start_day": 1,
      "end_day": 7,
      "refund_percentage": "100.00"
    },
    {
      "entry_id": 2,
      "schedule_id": 1,
      "start_day": 8,
      "end_day": 14,
      "refund_percentage": "75.00"
    },
    {
      "entry_id": 3,
      "schedule_id": 1,
      "start_day": 15,
      "end_day": null,
      "refund_percentage": "0.00"
    }
  ]
}

TypeScript Types ​

typescript
interface RefundSchedule {
  schedule_id: number
  name: string
  term_id: number | null
  is_default: boolean
  is_active: boolean
}

interface RefundScheduleDetail extends RefundSchedule {
  created_at: string
  updated_at: string
  entries: RefundScheduleEntry[]
}

interface RefundScheduleEntry {
  entry_id: number
  schedule_id: number
  start_day: number
  end_day: number | null
  refund_percentage: string
}

Create Refund Schedule ​

POST /api/v1/billing/refund-schedules

Request Body ​

FieldTypeRequiredDescription
namestringYesSchedule name (max 200)
term_idintegerNoOptional term-specific schedule
is_defaultbooleanNoDefault schedule flag
is_activebooleanNoActive status

Create Schedule Entry ​

POST /api/v1/billing/refund-schedules/{scheduleID}/entries

Request Body ​

FieldTypeRequiredDescription
schedule_idintegerYesParent schedule ID
start_dayintegerYesStart day (>= 0)
end_dayintegerNoEnd day (null = no limit)
refund_percentagedecimalYesRefund percentage

Student Billing ​

Get Student Balance ​

GET /api/v1/billing/students/{studentID}/balance/{termID}

Get the balance for a student in a specific term.

Success Response (200 OK) ​

json
{
  "student_id": 42,
  "term_id": 10,
  "total_charges": "15000.00",
  "total_payments": "10000.00",
  "total_credits": "500.00",
  "balance": "4500.00"
}

TypeScript Types ​

typescript
interface StudentBalance {
  student_id: number
  term_id: number
  total_charges: string
  total_payments: string
  total_credits: string
  balance: string
}

Get Student Billing Summary ​

GET /api/v1/billing/students/{studentID}/summary

Get a comprehensive billing summary including transactions and payment plan enrollments.

Success Response (200 OK) ​

json
{
  "student_id": 42,
  "term_id": 10,
  "total_charges": "15000.00",
  "total_payments": "10000.00",
  "total_credits": "500.00",
  "balance": "4500.00",
  "transactions": [],
  "payment_plans": []
}

Calculate Billing ​

POST /api/v1/billing/students/{studentID}/calculate

Calculate billing for a student and term.

Request Body ​

FieldTypeRequiredDescription
student_idintegerYesStudent ID
term_idintegerYesTerm ID

Success Response (200 OK) ​

json
{
  "student_id": 42,
  "term_id": 10,
  "tuition_charges": "12000.00",
  "fee_charges": "3000.00",
  "total_charges": "15000.00",
  "total_payments": "0.00",
  "total_credits": "0.00",
  "balance": "15000.00",
  "line_items": [
    {
      "description": "Tuition - 15 credits @ $800/credit",
      "category": "TUITION",
      "amount": "12000.00",
      "fee_type_id": 1
    },
    {
      "description": "Student Activity Fee",
      "category": "STUDENT_FEE",
      "amount": "500.00",
      "fee_type_id": 3
    }
  ]
}

TypeScript Types ​

typescript
interface BillingCalculationResult {
  student_id: number
  term_id: number
  tuition_charges: string
  fee_charges: string
  total_charges: string
  total_payments: string
  total_credits: string
  balance: string
  line_items: BillingCalculationItem[]
}

interface BillingCalculationItem {
  description: string
  category: string
  amount: string
  fee_type_id: number | null
}

Enroll in Payment Plan ​

POST /api/v1/billing/students/{studentID}/enroll-plan

Enroll a student in a payment plan.

Request Body ​

FieldTypeRequiredDescription
student_idintegerYesStudent ID
plan_idintegerYesPayment plan ID
term_idintegerYesTerm ID

Get Student Payment Schedule ​

GET /api/v1/billing/students/{studentID}/payment-schedule

Success Response (200 OK) ​

Returns the student's payment plan enrollment with installment schedule.


List Student Transactions ​

GET /api/v1/billing/students/{studentID}/transactions

Returns all billing transactions for a student.


Get Student Statement ​

GET /api/v1/billing/students/{studentID}/statement

Get a formatted billing statement for a student.


Enrollments (Payment Plan) ​

List Enrollments ​

GET /api/v1/billing/enrollments

List all payment plan enrollments.

Success Response (200 OK) ​

json
{
  "count": 50,
  "results": [
    {
      "enrollment_id": 1,
      "student_id": 42,
      "plan_id": 1,
      "plan_name": "4-Month Payment Plan",
      "term_id": 10,
      "enrolled_date": "2024-07-15T00:00:00Z",
      "total_amount": "15000.00",
      "is_active": true
    }
  ]
}

Get Enrollment ​

GET /api/v1/billing/enrollments/{enrollmentID}

Returns enrollment details including payment schedule.

Success Response (200 OK) ​

json
{
  "enrollment_id": 1,
  "student_id": 42,
  "plan_id": 1,
  "plan_name": "4-Month Payment Plan",
  "term_id": 10,
  "enrolled_date": "2024-07-15T00:00:00Z",
  "total_amount": "15000.00",
  "is_active": true,
  "schedules": [
    {
      "schedule_id": 1,
      "enrollment_id": 1,
      "installment_number": 1,
      "due_date": "2024-08-01T00:00:00Z",
      "amount_due": "3750.00",
      "amount_paid": "3750.00",
      "status": "PAID",
      "paid_date": "2024-07-30T00:00:00Z"
    },
    {
      "schedule_id": 2,
      "enrollment_id": 1,
      "installment_number": 2,
      "due_date": "2024-09-01T00:00:00Z",
      "amount_due": "3750.00",
      "amount_paid": "0.00",
      "status": "PENDING",
      "paid_date": null
    }
  ]
}

TypeScript Types ​

typescript
interface StudentPaymentPlanEnrollment {
  enrollment_id: number
  student_id: number
  plan_id: number
  plan_name: string
  term_id: number
  enrolled_date: string
  total_amount: string
  is_active: boolean
}

interface StudentPaymentPlanEnrollmentDetail extends StudentPaymentPlanEnrollment {
  schedules: StudentPaymentPlanSchedule[]
}

interface StudentPaymentPlanSchedule {
  schedule_id: number
  enrollment_id: number
  installment_number: number
  due_date: string
  amount_due: string
  amount_paid: string
  status: 'PENDING' | 'PARTIAL' | 'PAID' | 'OVERDUE'
  paid_date: string | null
}



Complete endpoint reference ​

Every route this domain registers, with the permission node that gates it. Generated from the route table, so it is complete by construction — the sections above explain behaviour, this one guarantees nothing is missing.

Paths are relative to /api/v1/billing. A node in italics is an exemption rather than a grant: selfservice acts only on the caller's own record, public needs no session at all, and custom carries its own wrapper.

MethodEndpointPermission nodeDescription
GET/bandsBILLING.FEESList bands
DELETE/bands/{bandID}BILLING.FEESDelete a band
PATCH/bands/{bandID}BILLING.FEESUpdate a band
POST/calculateBILLING.FEESCalculate
GET/class-waiversBILLING.STUDENT_PLANSList class waivers
POST/class-waiversBILLING.STUDENT_PLANSCreate a class waiver
DELETE/class-waivers/{waiverID}BILLING.STUDENT_PLANSDelete a class waiver
GET/class-waivers/{waiverID}BILLING.STUDENT_PLANSGet one class waiver
PUT/class-waivers/{waiverID}BILLING.STUDENT_PLANSReplace a class waiver
GET/course-feesBILLING.COURSE_FEESList course fees
POST/course-feesBILLING.COURSE_FEESCreate a course fee
DELETE/course-fees/{courseFeeID}BILLING.COURSE_FEESDelete a course fee
GET/course-fees/{courseFeeID}BILLING.COURSE_FEESGet one course fee
PUT/course-fees/{courseFeeID}BILLING.COURSE_FEESReplace a course fee
GET/credit-ratesBILLING.FEESList credit rates
DELETE/credit-rates/{rateID}BILLING.FEESDelete a credit rate
PATCH/credit-rates/{rateID}BILLING.FEESUpdate a credit rate
POST/enroll-payment-planSTUDENT.MY_BILLINGCreate enroll payment plan
GET/enrollmentsRECORDS.STUDENT_FINANCIALList enrollments
GET/enrollments/{enrollmentID}RECORDS.STUDENT_FINANCIALGet one enrollment
GET/fee-typesBILLING.FEE_TYPESList fee types
POST/fee-typesBILLING.FEE_TYPESCreate a fee type
DELETE/fee-types/{feeTypeID}BILLING.FEE_TYPESDelete a fee type
GET/fee-types/{feeTypeID}BILLING.FEE_TYPESGet one fee type
PATCH/fee-types/{feeTypeID}BILLING.FEE_TYPESUpdate a fee type
DELETE/housing-assignments/{assignmentID}BILLING.STUDENT_PLANSDelete a housing assignment
GET/housing-plansBILLING.HOUSING_PLANSList housing plans
POST/housing-plansBILLING.HOUSING_PLANSCreate a housing plan
DELETE/housing-plans/{housingPlanID}BILLING.HOUSING_PLANSDelete a housing plan
GET/housing-plans/{housingPlanID}BILLING.HOUSING_PLANSGet one housing plan
PUT/housing-plans/{housingPlanID}BILLING.HOUSING_PLANSReplace a housing plan
DELETE/meal-elections/{electionID}BILLING.STUDENT_PLANSDelete a meal election
GET/meal-plansBILLING.MEAL_PLANSList meal plans
POST/meal-plansBILLING.MEAL_PLANSCreate a meal plan
DELETE/meal-plans/{mealPlanID}BILLING.MEAL_PLANSDelete a meal plan
GET/meal-plans/{mealPlanID}BILLING.MEAL_PLANSGet one meal plan
PUT/meal-plans/{mealPlanID}BILLING.MEAL_PLANSReplace a meal plan
GET/method-configsBILLING.RATE_RULESList method configs
POST/method-configsBILLING.RATE_RULESCreate a method config
GET/method-configs/fieldsBILLING.RATE_RULESList fields
DELETE/method-configs/{configID}BILLING.RATE_RULESDelete a method config
PATCH/method-configs/{configID}BILLING.RATE_RULESUpdate a method config
GET/methodsBILLING.METHODSList methods
POST/methodsBILLING.METHODSCreate a method
DELETE/methods/{methodID}BILLING.METHODSDelete a method
GET/methods/{methodID}BILLING.METHODSGet one method
PATCH/methods/{methodID}BILLING.METHODSUpdate a method
GET/methods/{methodID}/bandsBILLING.METHODSList the method's bands
POST/methods/{methodID}/bandsBILLING.METHODSAdd bands to a method
PUT/methods/{methodID}/bandsBILLING.METHODSUpdate the method's bands
GET/methods/{methodID}/configsBILLING.METHODSList the method's configs
POST/methods/{methodID}/configsBILLING.METHODSAdd configs to a method
GET/methods/{methodID}/credit_ratesBILLING.METHODSList the method's credit rates
POST/methods/{methodID}/credit_ratesBILLING.METHODSAdd credit rates to a method
GET/payment-plan-eligibilityBILLING.PLANSGet payment plan eligibility
DELETE/payment-plan-eligibility/{eligibilityID}BILLING.PLANSDelete a payment plan eligibility
PATCH/payment-plan-eligibility/{eligibilityID}BILLING.PLANSUpdate a payment plan eligibility
GET/payment-plan-feesBILLING.PLANSList payment plan fees
DELETE/payment-plan-fees/{feeID}BILLING.PLANSDelete a payment plan fee
PATCH/payment-plan-fees/{feeID}BILLING.PLANSUpdate a payment plan fee
GET/payment-plan-termsBILLING.PLANSList payment plan terms
DELETE/payment-plan-terms/{termID}BILLING.PLANSDelete a payment plan term
PATCH/payment-plan-terms/{termID}BILLING.PLANSUpdate a payment plan term
GET/payment-plansBILLING.PLANSList payment plans
POST/payment-plansBILLING.PLANSCreate a payment plan
DELETE/payment-plans/{planID}BILLING.PLANSDelete a payment plan
GET/payment-plans/{planID}BILLING.PLANSGet one payment plan
PATCH/payment-plans/{planID}BILLING.PLANSUpdate a payment plan
GET/payment-plans/{planID}/eligibilityBILLING.PLANSGet the payment plan's eligibility
POST/payment-plans/{planID}/eligibilityBILLING.PLANSAdd eligibility to a payment plan
GET/payment-plans/{planID}/feesBILLING.PLANSList the payment plan's fees
POST/payment-plans/{planID}/feesBILLING.PLANSAdd fees to a payment plan
GET/payment-plans/{planID}/termsBILLING.PLANSList the payment plan's terms
POST/payment-plans/{planID}/termsBILLING.PLANSAdd terms to a payment plan
GET/program-feesBILLING.PROGRAM_FEESList program fees
POST/program-feesBILLING.PROGRAM_FEESCreate a program fee
GET/program-fees/preview-majorsBILLING.PROGRAM_FEESPreview majors
DELETE/program-fees/{programFeeID}BILLING.PROGRAM_FEESDelete a program fee
GET/program-fees/{programFeeID}BILLING.PROGRAM_FEESGet one program fee
PUT/program-fees/{programFeeID}BILLING.PROGRAM_FEESReplace a program fee
GET/refund-schedule-entriesBILLING.REFUND_SCHEDULESList refund schedule entries
DELETE/refund-schedule-entries/{entryID}BILLING.REFUND_SCHEDULESDelete a refund schedule entry
PATCH/refund-schedule-entries/{entryID}BILLING.REFUND_SCHEDULESUpdate a refund schedule entry
GET/refund-schedulesBILLING.REFUND_SCHEDULESList refund schedules
POST/refund-schedulesBILLING.REFUND_SCHEDULESCreate a refund schedule
DELETE/refund-schedules/{scheduleID}BILLING.REFUND_SCHEDULESDelete a refund schedule
GET/refund-schedules/{scheduleID}BILLING.REFUND_SCHEDULESGet one refund schedule
PATCH/refund-schedules/{scheduleID}BILLING.REFUND_SCHEDULESUpdate a refund schedule
GET/refund-schedules/{scheduleID}/entriesBILLING.REFUND_SCHEDULESList the refund schedule's entries
POST/refund-schedules/{scheduleID}/entriesBILLING.REFUND_SCHEDULESAdd entries to a refund schedule
GET/reports/chargesBILLING.REPORTList charges
GET/reports/charges/fieldsBILLING.REPORTList fields
GET/section-feesBILLING.SECTION_FEESList section fees
POST/section-feesBILLING.SECTION_FEESCreate a section fee
DELETE/section-fees/{sectionFeeID}BILLING.SECTION_FEESDelete a section fee
GET/section-fees/{sectionFeeID}BILLING.SECTION_FEESGet one section fee
PUT/section-fees/{sectionFeeID}BILLING.SECTION_FEESReplace a section fee
GET/settingsBILLING.FEESList settings
POST/settingsBILLING.FEESCreate a setting
DELETE/settings/{settingID}BILLING.FEESDelete a setting
GET/settings/{settingID}BILLING.FEESGet one setting
PATCH/settings/{settingID}BILLING.FEESUpdate a setting
GET/student-type-rulesBILLING.STUDENT_TYPE_RULESList student type rules
POST/student-type-rulesBILLING.STUDENT_TYPE_RULESCreate a student type rule
GET/student-type-rules/fieldsBILLING.STUDENT_TYPE_RULESList fields
POST/student-type-rules/previewBILLING.STUDENT_TYPE_RULESPreview
GET/student-type-rules/scoreBILLING.STUDENT_TYPE_RULESGet score
DELETE/student-type-rules/{ruleID}BILLING.STUDENT_TYPE_RULESDelete a student type rule
GET/student-type-rules/{ruleID}BILLING.STUDENT_TYPE_RULESGet one student type rule
PUT/student-type-rules/{ruleID}BILLING.STUDENT_TYPE_RULESReplace a student type rule
GET/students/{studentID}/balance/{termID}RECORDS.STUDENT_FINANCIALGet one balance
POST/students/{studentID}/calculateBILLING.DETAILCalculate for a student
GET/students/{studentID}/eligible-plans/{termID}RECORDS.STUDENT_FINANCIALGet one eligible plan
POST/students/{studentID}/enroll-planRECORDS.STUDENT_FINANCIALAdd enroll plan to a student
GET/students/{studentID}/housing-assignmentsBILLING.STUDENT_PLANSList the student's housing assignments
POST/students/{studentID}/housing-assignmentsBILLING.STUDENT_PLANSAdd housing assignments to a student
GET/students/{studentID}/meal-electionsBILLING.STUDENT_PLANSList the student's meal elections
POST/students/{studentID}/meal-electionsBILLING.STUDENT_PLANSAdd meal elections to a student
GET/students/{studentID}/payment-plans/{termID}BILLING.PLANSGet one payment plan
GET/students/{studentID}/payment-scheduleRECORDS.STUDENT_FINANCIALGet the student's payment schedule
GET/students/{studentID}/statementRECORDS.STUDENT_FINANCIALGet the student's statement
GET/students/{studentID}/summaryRECORDS.STUDENT_FINANCIALGet the student's summary
GET/students/{studentID}/transactionsRECORDS.STUDENT_FINANCIALList the student's transactions
GET/students/{studentID}/upfront-discount/{termID}RECORDS.STUDENT_FINANCIALGet one upfront discount
GET/term-fee-bandsBILLING.FEESList term fee bands
DELETE/term-fee-bands/{bandID}BILLING.FEESDelete a term fee band
PATCH/term-fee-bands/{bandID}BILLING.FEESUpdate a term fee band
GET/term-fee-categoriesBILLING.FEESList term fee categories
DELETE/term-fee-categories/{categoryID}BILLING.FEESDelete a term fee category
PATCH/term-fee-categories/{categoryID}BILLING.FEESUpdate a term fee category
GET/term-fee-categories/{categoryID}/bandsBILLING.FEESList the term fee category's bands
POST/term-fee-categories/{categoryID}/bandsBILLING.FEESAdd bands to a term fee category
GET/term-fee-category-bandsBILLING.FEESList term fee category bands
DELETE/term-fee-category-bands/{bandID}BILLING.FEESDelete a term fee category band
PATCH/term-fee-category-bands/{bandID}BILLING.FEESUpdate a term fee category band
GET/term-feesBILLING.FEESList term fees
POST/term-feesBILLING.FEESCreate a term fee
POST/term-fees/copy_feesBILLING.FEESCopy fees
GET/term-fees/fieldsBILLING.FEESList fields
DELETE/term-fees/{termFeeID}BILLING.FEESDelete a term fee
GET/term-fees/{termFeeID}BILLING.FEESGet one term fee
PATCH/term-fees/{termFeeID}BILLING.FEESUpdate a term fee
GET/term-fees/{termFeeID}/bandsBILLING.FEESList the term fee's bands
POST/term-fees/{termFeeID}/bandsBILLING.FEESAdd bands to a term fee
GET/term-fees/{termFeeID}/categoriesBILLING.FEESList the term fee's categories
POST/term-fees/{termFeeID}/categoriesBILLING.FEESAdd categories to a term fee
GET/transactionsRECORDS.STUDENT_FINANCIALList transactions
POST/transactionsRECORDS.STUDENT_FINANCIALCreate a transaction
GET/transactions/{transactionID}RECORDS.STUDENT_FINANCIALGet one transaction
GET/upfront-discountsBILLING.PLANSList upfront discounts
POST/upfront-discountsBILLING.PLANSCreate a upfront discount
DELETE/upfront-discounts/{discountID}BILLING.PLANSDelete a upfront discount
GET/upfront-discounts/{discountID}BILLING.PLANSGet one upfront discount
PATCH/upfront-discounts/{discountID}BILLING.PLANSUpdate a upfront discount

Student Information System Documentation