Allocation configurations define who pays. They can split responsibility, transfer coverage to a sponsor/subsidy, and cap responsibility across a billing period. When caps are reached, the leftover becomes a contractual write-off (recorded as a discount outcome).
Allocation configurations answer: “How is a charge distributed across responsible parties?”
They are referenced by:
- Subscriptions (ongoing intent)
- Charges (direct billing)
- Billable Entity: who services were rendered to (e.g., a participant / dependent / member)
- Account: who is financially responsible (e.g., household, sponsor, agency)
Allocations operate on accounts. The billable entity provides the context that ties services to responsibility, but the allocation rules distribute dollars to accounts.
Rules are applied top-to-bottom. Small changes in order can change outcomes.
A common pattern:
- Establish base responsibility (RESPONSIBLE_PARTY)
- Transfer coverage (COVERAGE_TRANSFER)
- Apply caps (BILLING_CAP)
| Rule | What it does |
|---|---|
| RESPONSIBLE_PARTY | Establishes base responsibility (percent splits) |
| COVERAGE_TRANSFER | Moves a fixed amount of responsibility from one account to another |
| BILLING_CAP | Limits responsibility across a period. Residual becomes contractual write-off |
Service recipient
Responsible party
Computation step
- Base URL:
https://api.nelnetpay.com - Endpoint:
POST /allocationConfigurations - Auth: Bearer token
{
"name": "Allocation Name",
"rules": [
{ "ruleType": "RESPONSIBLE_PARTY", "accountId": "acct_a", "percent": 100 }
],
"tags": {
"billing": { "allocationScenario": "EXAMPLE" }
}
}- Account: One entity (e.g., “Smith Family”)
- BillableEntity: One per child (services rendered to the child)
- Allocation: 100% responsible party
Emily (be_emily)
Smith Family (acct_smith)
(100%)
curl -X POST "https://api.nelnetpay.com/allocationConfigurations" -H "Authorization: Bearer $ACCESS_TOKEN" -H "Content-Type: application/json" -d '{
"name": "Single Family - 100%",
"rules": [
{ "ruleType": "RESPONSIBLE_PARTY", "accountId": "acct_smith", "percent": 100 }
],
"tags": {
"billing": { "allocationScenario": "SINGLE_FAMILY" }
}
}'- Accounts: Family + Subsidy agency
- Allocation:
- Family responsible for base (100%)
- Subsidy covers a fixed dollar amount per charge (coverage transfer)
- Optional: cap subsidy coverage by period
Child (be_child)
- RESPONSIBLE_PARTY: Family 100%
- COVERAGE_TRANSFER: $25 per charge → Subsidy
- OptionalBILLING_CAP: cap subsidy coverage per period
Family (acct_family)
Subsidy (acct_subsidy)
curl -X POST "https://api.nelnetpay.com/allocationConfigurations" -H "Authorization: Bearer $ACCESS_TOKEN" -H "Content-Type: application/json" -d '{
"name": "Family + Subsidy",
"rules": [
{ "ruleType": "RESPONSIBLE_PARTY", "accountId": "acct_family", "percent": 100 },
{
"ruleType": "COVERAGE_TRANSFER",
"fromAccountId": "acct_family",
"toAccountId": "acct_subsidy",
"amountPerCharge": 2500
},
{
"ruleType": "BILLING_CAP",
"accountId": "acct_subsidy",
"capAmount": 50000,
"capPeriod": "MONTHLY"
}
],
"tags": {
"billing": { "allocationScenario": "FAMILY_SUBSIDY" }
}
}'- Accounts: Jane + John
- BillableEntity: Alex
- Allocation: 50/50 split
Alex (be_alex)
Jane (acct_jane)
(50%)
John (acct_john)
(50%)
curl -X POST "https://api.nelnetpay.com/allocationConfigurations" -H "Authorization: Bearer $ACCESS_TOKEN" -H "Content-Type: application/json" -d '{
"name": "Split 50/50 - One Child",
"rules": [
{ "ruleType": "RESPONSIBLE_PARTY", "accountId": "acct_jane", "percent": 50 },
{ "ruleType": "RESPONSIBLE_PARTY", "accountId": "acct_john", "percent": 50 }
],
"tags": {
"billing": { "allocationScenario": "SPLIT_ONE_CHILD" }
}
}'- Alex – 50/50 Jane/John
- Emily – 100% Jane
- Jack – 100% John
Jane 50% (acct_jane) • John 50% (acct_john)
Jane 100% (acct_jane)
John 100% (acct_john)
You typically create multiple allocation configurations:
- Allocation A: 50/50 split (for Alex)
- Allocation B: 100% Jane (for Emily)
- Allocation C: 100% John (for Jack)
Then reference the correct allocation configuration from each child’s subscription or charge.
- RESPONSIBLE_PARTY: Jane 50%, John 50%
- COVERAGE_TRANSFER: subsidy covers fixed amount from Jane’s share (e.g., $25/day)
- Optional cap: subsidy coverage capped monthly
Alex (be_alex)
- RESPONSIBLE_PARTY: Jane 50%, John 50%
- COVERAGE_TRANSFER: from Jane → Subsidy ($25 per charge)
- OptionalBILLING_CAP: cap subsidy coverage per period
acct_jane
acct_john
acct_subsidy
curl -X POST "https://api.nelnetpay.com/allocationConfigurations" -H "Authorization: Bearer $ACCESS_TOKEN" -H "Content-Type: application/json" -d '{
"name": "Split 50/50 + Subsidy on Jane",
"rules": [
{ "ruleType": "RESPONSIBLE_PARTY", "accountId": "acct_jane", "percent": 50 },
{ "ruleType": "RESPONSIBLE_PARTY", "accountId": "acct_john", "percent": 50 },
{
"ruleType": "COVERAGE_TRANSFER",
"fromAccountId": "acct_jane",
"toAccountId": "acct_subsidy",
"amountPerCharge": 2500
},
{
"ruleType": "BILLING_CAP",
"accountId": "acct_subsidy",
"capAmount": 50000,
"capPeriod": "MONTHLY"
}
],
"tags": {
"billing": { "allocationScenario": "SPLIT_SUBSIDY" }
}
}'You do not create a WRITE_OFF rule type.
Instead, write-offs are an outcome when caps constrain responsibility.
If you cap an account at
$350 for the billing cycle and there are four $100 charges, the cap is reached at $350 and the remaining $50 is treated as a contractual write-off (recorded as a discount outcome).
Why this matters:
- caps are applied across a billing period (cycle-aware)
- the “leftover” is deterministic and auditable
- reporting can treat the residual as contractual revenue reduction
Allocation configurations should include tags so downstream records can explain why responsibility was routed:
{
"tags": {
"billing": {
"allocationScenario": "FAMILY_SUBSIDY",
"source": "admin-ui"
}
}
}Allocation configurations are versioned:
- updating creates a new version
- existing charges keep the snapshot they were created with
- applying new allocation behavior to existing charges requires an explicit charge update (and the charge must still be mutable)
See Versioning & Change Management for practical change patterns.