Manage rate catalog (pricing for services)
Billing & Ledger Service API (1.0.0)
The Billing & Ledger Service is the financial engine of the NPS Billing Platform. It manages pricing (Rates, Rate Cards), subscription configurations, allocation rules for split billing scenarios (divorced households, subsidies), charge lifecycle, and double-entry accounting ledger.
Charges follow a strict lifecycle with immutability after invoicing:
- PENDING → Created but not validated
- BILLED → Validated and ready to invoice (still editable)
- INVOICED → Invoiced (IMMUTABLE - moved to SettledCharge)
- PAID → Paid directly without invoice
- VOID → Cancelled
Defines how charges are split between multiple accounts (e.g., divorced parents, subsidy agencies). Three rule types:
- RESPONSIBLE_PARTY: Percentage-based split
- COVERAGE_TRANSFER: Fixed amount covered (e.g., $25 subsidy per charge)
- BILLING_CAP: Maximum amount per period
All financial transactions follow the accounting equation (Debits = Credits). Journal entries are immutable once created - corrections use adjustment entries.
- Mock serverhttps://docs.nelnetpay.com/_mock/apis/billing-ledger-service/allocationConfigurations
- UAT serverhttps://api.uat.nelnetpay.com/billing/allocationConfigurations
- Production serverhttps://api.nelnetpay.com/billing/allocationConfigurations
- curl
- JavaScript
- Node.js
- Python
- Java
- C#
- PHP
- Go
- Ruby
- R
- Payload
curl -i -X GET \
'https://docs.nelnetpay.com/_mock/apis/billing-ledger-service/allocationConfigurations?page=1&page_size=50' \
-H 'Authorization: Bearer <YOUR_TOKEN_HERE>'{ "results": [ { … } ], "pagination": { "totalRecords": 100, "currentPage": 1, "totalPages": 10, "nextPage": 2, "prevPage": null } }
Request
Create a new allocation configuration with rules.
Important: The total allocation percentage does NOT need to equal 100% at creation time. This allows for incremental household enrollment. Validation of 100% happens at charge creation time.
Rule Types:
RESPONSIBLE_PARTY- Split by percentage (e.g., Mom 50%, Dad 50%)COVERAGE_TRANSFER- Fixed amount covered (e.g., subsidy covers $25 per charge)BILLING_CAP- Maximum amount per period (e.g., subsidy covers up to $400/month)
Processing Order: Rules are processed in priority order (1 = first). COVERAGE_TRANSFER and BILLING_CAP typically run before RESPONSIBLE_PARTY.
Type of allocation rule
- Mock serverhttps://docs.nelnetpay.com/_mock/apis/billing-ledger-service/allocationConfigurations
- UAT serverhttps://api.uat.nelnetpay.com/billing/allocationConfigurations
- Production serverhttps://api.nelnetpay.com/billing/allocationConfigurations
- curl
- JavaScript
- Node.js
- Python
- Java
- C#
- PHP
- Go
- Ruby
- R
- Payload
curl -i -X POST \
https://docs.nelnetpay.com/_mock/apis/billing-ledger-service/allocationConfigurations \
-H 'Authorization: Bearer <YOUR_TOKEN_HERE>' \
-H 'Content-Type: application/json' \
-d '{
"name": "Emma - household + State Subsidy Split",
"description": "State subsidy covers $25/charge, remainder to household",
"rules": [
{
"priority": 1,
"ruleType": "COVERAGE_TRANSFER",
"accountId": "550e8400-e29b-41d4-a716-446655440030",
"fixedAmount": 2500
},
{
"priority": 2,
"ruleType": "RESPONSIBLE_PARTY",
"accountId": "550e8400-e29b-41d4-a716-446655440031",
"percentage": 100
}
]
}'{ "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08", "entityId": "156e622c-6cdf-4c27-9bc9-2f2db69919f5", "name": "string", "description": "string", "version": 0, "effectiveFrom": "2019-08-24T14:15:22Z", "rules": [ { … } ], "optimisticLockVersion": 0, "createdAt": "2019-08-24T14:15:22Z", "updatedAt": "2019-08-24T14:15:22Z" }
- Mock serverhttps://docs.nelnetpay.com/_mock/apis/billing-ledger-service/allocationConfigurations/{allocationConfigId}
- UAT serverhttps://api.uat.nelnetpay.com/billing/allocationConfigurations/{allocationConfigId}
- Production serverhttps://api.nelnetpay.com/billing/allocationConfigurations/{allocationConfigId}
- curl
- JavaScript
- Node.js
- Python
- Java
- C#
- PHP
- Go
- Ruby
- R
- Payload
curl -i -X GET \
'https://docs.nelnetpay.com/_mock/apis/billing-ledger-service/allocationConfigurations/{allocationConfigId}' \
-H 'Authorization: Bearer <YOUR_TOKEN_HERE>'{ "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08", "entityId": "156e622c-6cdf-4c27-9bc9-2f2db69919f5", "name": "string", "description": "string", "version": 0, "effectiveFrom": "2019-08-24T14:15:22Z", "rules": [ { … } ], "optimisticLockVersion": 0, "createdAt": "2019-08-24T14:15:22Z", "updatedAt": "2019-08-24T14:15:22Z" }
- Mock serverhttps://docs.nelnetpay.com/_mock/apis/billing-ledger-service/allocationConfigurations/{allocationConfigId}
- UAT serverhttps://api.uat.nelnetpay.com/billing/allocationConfigurations/{allocationConfigId}
- Production serverhttps://api.nelnetpay.com/billing/allocationConfigurations/{allocationConfigId}
- curl
- JavaScript
- Node.js
- Python
- Java
- C#
- PHP
- Go
- Ruby
- R
- Payload
curl -i -X PATCH \
'https://docs.nelnetpay.com/_mock/apis/billing-ledger-service/allocationConfigurations/{allocationConfigId}' \
-H 'Authorization: Bearer <YOUR_TOKEN_HERE>' \
-H 'Content-Type: application/json' \
-d '{
"name": "string",
"description": "string",
"rules": [
{
"priority": 1,
"ruleType": "RESPONSIBLE_PARTY",
"accountId": "3d07c219-0a88-45be-9cfc-91e9d095a1e9",
"percentage": 100,
"fixedAmount": 0,
"capAmount": 0,
"capPeriod": "DAILY",
"remainderHandling": "DISTRIBUTE_PROPORTIONALLY"
}
]
}'{ "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08", "entityId": "156e622c-6cdf-4c27-9bc9-2f2db69919f5", "name": "string", "description": "string", "version": 0, "effectiveFrom": "2019-08-24T14:15:22Z", "rules": [ { … } ], "optimisticLockVersion": 0, "createdAt": "2019-08-24T14:15:22Z", "updatedAt": "2019-08-24T14:15:22Z" }
- Mock serverhttps://docs.nelnetpay.com/_mock/apis/billing-ledger-service/allocationConfigurations/{allocationConfigId}
- UAT serverhttps://api.uat.nelnetpay.com/billing/allocationConfigurations/{allocationConfigId}
- Production serverhttps://api.nelnetpay.com/billing/allocationConfigurations/{allocationConfigId}
- curl
- JavaScript
- Node.js
- Python
- Java
- C#
- PHP
- Go
- Ruby
- R
- Payload
curl -i -X DELETE \
'https://docs.nelnetpay.com/_mock/apis/billing-ledger-service/allocationConfigurations/{allocationConfigId}' \
-H 'Authorization: Bearer <YOUR_TOKEN_HERE>'Request
Validate an allocation configuration for a specific billable entity.
Validation Checks:
- All accounts in allocation rules are associated with the billable entity
- RESPONSIBLE_PARTY rules total 100% of remaining amount
- No circular dependencies in rules
Use this before creating charges to catch configuration issues early.
- Mock serverhttps://docs.nelnetpay.com/_mock/apis/billing-ledger-service/allocationConfigurations/{allocationConfigId}/validate
- UAT serverhttps://api.uat.nelnetpay.com/billing/allocationConfigurations/{allocationConfigId}/validate
- Production serverhttps://api.nelnetpay.com/billing/allocationConfigurations/{allocationConfigId}/validate
- curl
- JavaScript
- Node.js
- Python
- Java
- C#
- PHP
- Go
- Ruby
- R
- Payload
curl -i -X POST \
'https://docs.nelnetpay.com/_mock/apis/billing-ledger-service/allocationConfigurations/{allocationConfigId}/validate' \
-H 'Authorization: Bearer <YOUR_TOKEN_HERE>' \
-H 'Content-Type: application/json' \
-d '{
"billableEntityId": "efd73805-0b19-4de3-9f1e-a64de8c44765"
}'{ "valid": true, "totalPercentage": 0.1, "errors": [ { … } ], "warnings": [ { … } ] }