Manage rate catalog (pricing for services)
- Get Journal Entry Details
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.
Request
List journal entries (double-entry accounting records).
Sources:
INVOICE- Created when invoice is posted (DR: A/R, CR: Revenue)PAYMENT- Created when payment is received (DR: Bank, CR: A/R)REFUND- Created when refund is processedADJUSTMENT- Manual correctionsREMITTANCE- Payment processor fee tracking
- Mock serverhttps://docs.nelnetpay.com/_mock/apis/billing-ledger-service/ledger/journalEntries
- UAT serverhttps://api.uat.nelnetpay.com/billing/ledger/journalEntries
- Production serverhttps://api.nelnetpay.com/billing/ledger/journalEntries
- 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/ledger/journalEntries?source=INVOICE&entry_date_from=2019-08-24T14%3A15%3A22Z&entry_date_to=2019-08-24T14%3A15%3A22Z&source_reference=string&page=1&page_size=50' \
-H 'Authorization: Bearer <YOUR_TOKEN_HERE>'Successful response
Source of journal entry
Nested map of invoice IDs to charge IDs for tracing. Structure: { "invoiceId": ["chargeId1", "chargeId2"], ... } Enables tracking when a payment applies to multiple invoices.
Type of adjustment for manual entries
Chart of accounts code
Optimistic locking version (managed by Hibernate @Version). Prevents concurrent update conflicts.
{ "results": [ { … } ], "pagination": { "totalRecords": 100, "currentPage": 1, "totalPages": 10, "nextPage": 2, "prevPage": null } }
Request
Create a new journal entry with lines.
Double-Entry Rule: Sum of debits MUST equal sum of credits. The entry will be rejected if not balanced.
Immutability: Journal entries are immutable once created. Use adjustment entries for corrections.
Account Codes:
REVENUE- Revenue accountsAR- Accounts ReceivableCONTRA_REVENUE- Contra-revenue (discounts)CLEARING- Clearing accountsBANK- Bank accountsFEE_EXPENSE- Processing fee expensesREFUND_EXPENSE- Refund expenses
Type of adjustment for manual entries
Chart of accounts code
- Mock serverhttps://docs.nelnetpay.com/_mock/apis/billing-ledger-service/ledger/journalEntries
- UAT serverhttps://api.uat.nelnetpay.com/billing/ledger/journalEntries
- Production serverhttps://api.nelnetpay.com/billing/ledger/journalEntries
- 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/ledger/journalEntries \
-H 'Authorization: Bearer <YOUR_TOKEN_HERE>' \
-H 'Content-Type: application/json' \
-H 'Idempotency-Key: 497f6eca-6276-4993-bfeb-53cbbbba6f08' \
-d '{
"entryDate": "2026-01-20T10:30:00Z",
"currency": "USD",
"source": "ADJUSTMENT",
"sourceReference": "ADJ-2026-001",
"adjustmentType": "DISCOUNT_CORRECTION",
"reason": "Applied missing sibling discount",
"lines": [
{
"accountCode": "CONTRA_REVENUE",
"direction": "DEBIT",
"amount": 1000,
"description": "Sibling discount correction",
"accountId": "550e8400-e29b-41d4-a716-446655440031"
},
{
"accountCode": "AR",
"direction": "CREDIT",
"amount": 1000,
"description": "Reduce A/R for discount",
"accountId": "550e8400-e29b-41d4-a716-446655440031"
}
]
}'Journal entry created successfully
Nested map of invoice IDs to charge IDs for tracing. Structure: { "invoiceId": ["chargeId1", "chargeId2"], ... } Enables tracking when a payment applies to multiple invoices.
Type of adjustment for manual entries
Chart of accounts code
Optimistic locking version (managed by Hibernate @Version). Prevents concurrent update conflicts.
{ "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08", "entityId": "156e622c-6cdf-4c27-9bc9-2f2db69919f5", "entryDate": "2019-08-24T14:15:22Z", "currency": "USD", "source": "INVOICE", "sourceReference": "string", "references": { "property1": [ … ], "property2": [ … ] }, "adjustmentType": "STANDARD", "reason": "string", "adminUserId": "string", "relatedSourceRef": "string", "totalAmount": 0, "isBalanced": true, "lines": [ { … } ], "optimisticLockVersion": 0, "createdAt": "2019-08-24T14:15:22Z" }
- Mock serverhttps://docs.nelnetpay.com/_mock/apis/billing-ledger-service/ledger/journalEntries/{journalEntryId}
- UAT serverhttps://api.uat.nelnetpay.com/billing/ledger/journalEntries/{journalEntryId}
- Production serverhttps://api.nelnetpay.com/billing/ledger/journalEntries/{journalEntryId}
- 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/ledger/journalEntries/{journalEntryId}' \
-H 'Authorization: Bearer <YOUR_TOKEN_HERE>'Successful response
Nested map of invoice IDs to charge IDs for tracing. Structure: { "invoiceId": ["chargeId1", "chargeId2"], ... } Enables tracking when a payment applies to multiple invoices.
Type of adjustment for manual entries
Chart of accounts code
Optimistic locking version (managed by Hibernate @Version). Prevents concurrent update conflicts.
{ "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08", "entityId": "156e622c-6cdf-4c27-9bc9-2f2db69919f5", "entryDate": "2019-08-24T14:15:22Z", "currency": "USD", "source": "INVOICE", "sourceReference": "string", "references": { "property1": [ … ], "property2": [ … ] }, "adjustmentType": "STANDARD", "reason": "string", "adminUserId": "string", "relatedSourceRef": "string", "totalAmount": 0, "isBalanced": true, "lines": [ { … } ], "optimisticLockVersion": 0, "createdAt": "2019-08-24T14:15:22Z" }
- Mock serverhttps://docs.nelnetpay.com/_mock/apis/billing-ledger-service/ledger/accountBalances
- UAT serverhttps://api.uat.nelnetpay.com/billing/ledger/accountBalances
- Production serverhttps://api.nelnetpay.com/billing/ledger/accountBalances
- 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/ledger/accountBalances?as_of_date=2019-08-24T14%3A15%3A22Z' \
-H 'Authorization: Bearer <YOUR_TOKEN_HERE>'{ "asOfDate": "2019-08-24T14:15:22Z", "balances": [ { … } ] }
- Mock serverhttps://docs.nelnetpay.com/_mock/apis/billing-ledger-service/ledger/trialBalance
- UAT serverhttps://api.uat.nelnetpay.com/billing/ledger/trialBalance
- Production serverhttps://api.nelnetpay.com/billing/ledger/trialBalance
- 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/ledger/trialBalance?from_date=2019-08-24&to_date=2019-08-24' \
-H 'Authorization: Bearer <YOUR_TOKEN_HERE>'{ "periodStart": "2019-08-24", "periodEnd": "2019-08-24", "accounts": [ { … } ], "totalDebits": 0, "totalCredits": 0, "isBalanced": true }
- Mock serverhttps://docs.nelnetpay.com/_mock/apis/billing-ledger-service/ledgerJournalEntryCreated
- UAT serverhttps://api.uat.nelnetpay.com/billing/ledgerJournalEntryCreated
- Production serverhttps://api.nelnetpay.com/billing/ledgerJournalEntryCreated
{ "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08", "type": "ledger.journal_entry.created", "occurredAt": "2019-08-24T14:15:22Z", "data": { "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08", "entityId": "156e622c-6cdf-4c27-9bc9-2f2db69919f5", "entryDate": "2019-08-24T14:15:22Z", "currency": "USD", "source": "INVOICE", "sourceReference": "string", "references": { … }, "adjustmentType": "STANDARD", "reason": "string", "adminUserId": "string", "relatedSourceRef": "string", "totalAmount": 0, "isBalanced": true, "lines": [ … ], "optimisticLockVersion": 0, "createdAt": "2019-08-24T14:15:22Z" } }