Billing Files
Each month DialStack produces billing files for your platform. This page explains what is in them and how their numbers fit together, so you can bill your customers accurately.
Overview
| Files | What they tell you | Prices |
|---|---|---|
| Account billing files | What to collect from each of your customers: every charge for every billed account, broken down by location. | Sell and buy rates |
| Platform billing files | What you remit to DialStack: service charges summed across your accounts, plus the taxes and fees collected. | Buy rates |
Each set comes in three formats, named after your platform, such as spineline-account-billing.json and spineline-platform-invoice.json:
- JSON, the file typically used for automated billing workflows. It carries every detail.
- CSV, the same data in sections, for spreadsheets and accounting imports.
- PDF, a human-readable bill. Its layout may change, so don't parse it.
All amounts are in US dollars.
How billing works
Billing types
Each run bills one calendar month, the billing period. Every charge has a billingType:
billingType | What it bills | Service period |
|---|---|---|
advance | Recurring charges for the billing month, paid ahead, for everything in service on its first day. Not prorated. | The billing month |
catchup | Recurring charges for the prior month, for resources added during it, prorated from the day each was added. | The prior month |
arrears | Non-recurring charges for the prior month, billed after the fact, such as the Service Set-up Fee. | The prior month |
billingType says only when a charge is billed. Whether it recurs is said by the list it is in: lineItems for recurring charges, oneTimeCharges for non-recurring ones.
A resource removed during the billing month is not credited against its advance charge. A resource added and removed within the same month is billed on its catch-up line item only for the days it was in service.
An account's first bill includes its first partial month. When an account's billing starts partway through the prior month, catch-up bills that month from the day billing started, for everything in service from then on, including resources that existed before that day. A resource removed on or before the day its billing starts is not billed.
Line items and amounts
Each recurring charge is a line item, for one kind of resource and one billingType. A line item has a baseline, what was in service on the first day of its service period, and a list of changes, one for each step up or down after that. An advance line item is a snapshot of the first day, so it is always a baseline with no changes. A catch-up line item covers only resources that started billing that month, so its baseline has a count of 0 unless something started on the month's first day, and each addition or removal is a change.
baseline: amount = count × rate
change: amount = countChange × rate × daysInEffect ÷ daysInPeriod
count is how many are in service (for a change, after it), countChange is the change's step, daysInEffect runs from the change's date to the end of the service period, inclusive, and daysInPeriod is the days in the service period. Sell and buy amounts use the same formula at their own rate.
Each amount is rounded once to the cent, halves away from zero. Every total is the plain sum of the amounts under it, so every total can be recomputed exactly.
Locations
Users and phone numbers are billed at their service location. Each account carries a locations list with the same fields as the account, one entry per active location, including a location with no charges (zero amounts, empty lists). The account's figures are the sums of its locations' figures. On the account, the locations' changes are merged in date order, each keeping its location's amount, and count becomes the account's running total.
Examples
Both examples are one Spineline account billed for July 2026. Service prices are illustrative: $20.00 a user and $2.00 a phone number at sell, $8.00 and $0.50 at buy. Recovery fees are the real rates. Government-imposed taxes, fees, and surcharges are illustrative.
A simple bill
Maple Street Chiropractic has one location. It had five users on June 1 and removed one on June 12. That removal is not credited against June's advance charge, so it shows only as a lower count on July's. Maple added nothing in June, so its July bill has only advance charges, each a baseline with no changes:
| Charge | Calculation | Sell | Buy |
|---|---|---|---|
| Users | 4 × 20.00 | 80.00 | 32.00 |
| Phone numbers | 3 × 2.00 | 6.00 | 1.50 |
| Regulatory Cost Recovery Fee | 4 × 1.45 | 5.80 | |
| VoIP E-911 Service Fee | 3 × 0.50 | 1.50 | |
| Government-imposed taxes, fees, and surcharges | 5.67 | ||
| Total due | 98.97 |
JSON
{
"platformId": "platform_01k2spineline000000000",
"platformName": "Spineline",
"billingRunId": "billrun_01k2examplerun0000000000",
"billingPeriod": {
"start": "2026-07-01",
"end": "2026-07-31",
"daysInPeriod": 31
},
"generatedAt": "2026-07-02T14:00:00Z",
"accounts": [
{
"accountId": "acct_01k2maplestreetchiro00000",
"accountName": "Maple Street Chiropractic",
"lineItems": [
{
"type": "user_seats",
"billingType": "advance",
"servicePeriod": {
"start": "2026-07-01",
"end": "2026-07-31"
},
"baseline": {
"date": "2026-07-01",
"count": 4,
"sellRate": 20,
"sellAmount": 80,
"buyRate": 8,
"buyAmount": 32,
"daysInEffect": 31,
"daysInPeriod": 31
},
"changes": [],
"sellSubtotal": 80,
"buySubtotal": 32
},
{
"type": "dids",
"billingType": "advance",
"servicePeriod": {
"start": "2026-07-01",
"end": "2026-07-31"
},
"baseline": {
"date": "2026-07-01",
"count": 3,
"sellRate": 2,
"sellAmount": 6,
"buyRate": 0.5,
"buyAmount": 1.5,
"daysInEffect": 31,
"daysInPeriod": 31
},
"changes": [],
"sellSubtotal": 6,
"buySubtotal": 1.5
}
],
"feeLineItems": [
{
"type": "recovery_fee_regulatory",
"billingType": "advance",
"servicePeriod": {
"start": "2026-07-01",
"end": "2026-07-31"
},
"baseline": {
"date": "2026-07-01",
"count": 4,
"sellRate": 1.45,
"sellAmount": 5.8,
"buyRate": 1.45,
"buyAmount": 5.8,
"daysInEffect": 31,
"daysInPeriod": 31
},
"changes": [],
"sellSubtotal": 5.8,
"buySubtotal": 5.8
},
{
"type": "recovery_fee_e911",
"billingType": "advance",
"servicePeriod": {
"start": "2026-07-01",
"end": "2026-07-31"
},
"baseline": {
"date": "2026-07-01",
"count": 3,
"sellRate": 0.5,
"sellAmount": 1.5,
"buyRate": 0.5,
"buyAmount": 1.5,
"daysInEffect": 31,
"daysInPeriod": 31
},
"changes": [],
"sellSubtotal": 1.5,
"buySubtotal": 1.5
}
],
"subtotalServices": 86,
"totalOneTimeCharges": 0,
"taxesFeesAndSurcharges": [
{
"description": "Regulatory Cost Recovery Fee",
"category": "recovery_fee",
"lineType": "recovery_fee_regulatory",
"billingType": "advance",
"amount": 5.8
},
{
"description": "VoIP E-911 Service Fee",
"category": "recovery_fee",
"lineType": "recovery_fee_e911",
"billingType": "advance",
"amount": 1.5
},
{
"description": "Federal Universal Service Fund",
"category": "tax",
"taxAuthority": "FEDERAL",
"taxLevel": "FEDERAL",
"taxLevelCode": "1",
"taxType": "001",
"taxTypeDesc": "UNIVERSAL SERVICE FUND",
"amount": 2.84
},
{
"description": "State 911 Fee",
"category": "tax",
"taxAuthority": "EXAMPLE STATE",
"taxLevel": "STATE/PROVINCE",
"taxLevelCode": "2",
"taxType": "002",
"taxTypeDesc": "E911 FEE",
"amount": 1.5
},
{
"description": "Sales Tax",
"category": "tax",
"taxAuthority": "EXAMPLE CITY",
"taxLevel": "CITY/TOWN/VILLAGE",
"taxLevelCode": "4",
"taxType": "003",
"taxTypeDesc": "SALES TAX",
"amount": 1.33
}
],
"totalTaxesFeesAndSurcharges": 12.97,
"totalRecoveryFees": 7.3,
"totalGovernmentTaxes": 5.67,
"totalDue": 98.97,
"locations": [
{
"locationId": "loc_01k2maplestreetchiro000000",
"locationName": "Maple Street Chiropractic",
"lineItems": [
{
"type": "user_seats",
"billingType": "advance",
"servicePeriod": {
"start": "2026-07-01",
"end": "2026-07-31"
},
"baseline": {
"date": "2026-07-01",
"count": 4,
"sellRate": 20,
"sellAmount": 80,
"buyRate": 8,
"buyAmount": 32,
"daysInEffect": 31,
"daysInPeriod": 31
},
"changes": [],
"sellSubtotal": 80,
"buySubtotal": 32
},
{
"type": "dids",
"billingType": "advance",
"servicePeriod": {
"start": "2026-07-01",
"end": "2026-07-31"
},
"baseline": {
"date": "2026-07-01",
"count": 3,
"sellRate": 2,
"sellAmount": 6,
"buyRate": 0.5,
"buyAmount": 1.5,
"daysInEffect": 31,
"daysInPeriod": 31
},
"changes": [],
"sellSubtotal": 6,
"buySubtotal": 1.5
}
],
"feeLineItems": [
{
"type": "recovery_fee_regulatory",
"billingType": "advance",
"servicePeriod": {
"start": "2026-07-01",
"end": "2026-07-31"
},
"baseline": {
"date": "2026-07-01",
"count": 4,
"sellRate": 1.45,
"sellAmount": 5.8,
"buyRate": 1.45,
"buyAmount": 5.8,
"daysInEffect": 31,
"daysInPeriod": 31
},
"changes": [],
"sellSubtotal": 5.8,
"buySubtotal": 5.8
},
{
"type": "recovery_fee_e911",
"billingType": "advance",
"servicePeriod": {
"start": "2026-07-01",
"end": "2026-07-31"
},
"baseline": {
"date": "2026-07-01",
"count": 3,
"sellRate": 0.5,
"sellAmount": 1.5,
"buyRate": 0.5,
"buyAmount": 1.5,
"daysInEffect": 31,
"daysInPeriod": 31
},
"changes": [],
"sellSubtotal": 1.5,
"buySubtotal": 1.5
}
],
"subtotalServices": 86,
"oneTimeCharges": [],
"totalOneTimeCharges": 0,
"taxesFeesAndSurcharges": [
{
"description": "Regulatory Cost Recovery Fee",
"category": "recovery_fee",
"lineType": "recovery_fee_regulatory",
"unit": "user_seat",
"billingType": "advance",
"amount": 5.8
},
{
"description": "VoIP E-911 Service Fee",
"category": "recovery_fee",
"lineType": "recovery_fee_e911",
"unit": "did",
"billingType": "advance",
"amount": 1.5
},
{
"description": "Federal Universal Service Fund",
"category": "tax",
"taxAuthority": "FEDERAL",
"taxLevel": "FEDERAL",
"taxLevelCode": "1",
"taxType": "001",
"taxTypeDesc": "UNIVERSAL SERVICE FUND",
"amount": 2.84
},
{
"description": "State 911 Fee",
"category": "tax",
"taxAuthority": "EXAMPLE STATE",
"taxLevel": "STATE/PROVINCE",
"taxLevelCode": "2",
"taxType": "002",
"taxTypeDesc": "E911 FEE",
"amount": 1.5
},
{
"description": "Sales Tax",
"category": "tax",
"taxAuthority": "EXAMPLE CITY",
"taxLevel": "CITY/TOWN/VILLAGE",
"taxLevelCode": "4",
"taxType": "003",
"taxTypeDesc": "SALES TAX",
"amount": 1.33
}
],
"totalTaxesFeesAndSurcharges": 12.97,
"totalRecoveryFees": 7.3,
"totalGovernmentTaxes": 5.67,
"totalDue": 98.97
}
]
}
],
"totals": {
"subtotalServices": 86,
"totalOneTimeCharges": 0,
"totalTaxesFeesAndSurcharges": 12.97,
"totalRecoveryFees": 7.3,
"totalGovernmentTaxes": 5.67,
"totalDue": 98.97
}
}
CSV
## summary
field,value
Platform name,Spineline
Platform ID,platform_01k2spineline000000000
Billing run,billrun_01k2examplerun0000000000
Period start,2026-07-01
Period end,2026-07-31
Days in period,31
Generated,2026-07-02T14:00:00Z
Total accounts,1
## accounts
account_id,account_name,user_seats_start,user_seats_end,user_seats_count,user_seats_full_month,user_seats,dids_start,dids_end,dids_count,dids_full_month,dids,voiceai_start,voiceai_end,voiceai_count,voiceai_full_month,voiceai_locations,subtotal_services,one_time_charges,taxes_fees_surcharges,total_due,government_taxes_fees_surcharges,other_fees_surcharges,catch_up_services,location_id,location_name
acct_01k2maplestreetchiro00000,Maple Street Chiropractic,4,4,4,80.00,80.00,3,3,3,6.00,6.00,0,0,0,0.00,0.00,86.00,0.00,12.97,98.97,5.67,7.30,0.00,loc_01k2maplestreetchiro000000,Maple Street Chiropractic
## activity
account_id,account_name,line_type,billing_type,service_start,service_end,row,date,count,sell_rate,amount,count_change,days_in_effect,days_in_period,location_id,location_name
acct_01k2maplestreetchiro00000,Maple Street Chiropractic,user_seats,advance,2026-07-01,2026-07-31,baseline,2026-07-01,4,20.00,80.00,,31,31,loc_01k2maplestreetchiro000000,Maple Street Chiropractic
acct_01k2maplestreetchiro00000,Maple Street Chiropractic,dids,advance,2026-07-01,2026-07-31,baseline,2026-07-01,3,2.00,6.00,,31,31,loc_01k2maplestreetchiro000000,Maple Street Chiropractic
## taxes and fees
account_id,account_name,group,description,tax_authority,tax_level,unit,unit_price,units,amount,billing_type,service_start,service_end,location_id,location_name
acct_01k2maplestreetchiro00000,Maple Street Chiropractic,Other Fees and Surcharges,Regulatory Cost Recovery Fee,,,user_seat,,,5.80,advance,2026-07-01,2026-07-31,loc_01k2maplestreetchiro000000,Maple Street Chiropractic
acct_01k2maplestreetchiro00000,Maple Street Chiropractic,Other Fees and Surcharges,VoIP E-911 Service Fee,,,did,,,1.50,advance,2026-07-01,2026-07-31,loc_01k2maplestreetchiro000000,Maple Street Chiropractic
acct_01k2maplestreetchiro00000,Maple Street Chiropractic,"Government Imposed Taxes, Fees, and Surcharges",Federal Universal Service Fund,FEDERAL,FEDERAL,,,,2.84,,,,loc_01k2maplestreetchiro000000,Maple Street Chiropractic
acct_01k2maplestreetchiro00000,Maple Street Chiropractic,"Government Imposed Taxes, Fees, and Surcharges",State 911 Fee,EXAMPLE STATE,STATE/PROVINCE,,,,1.50,,,,loc_01k2maplestreetchiro000000,Maple Street Chiropractic
acct_01k2maplestreetchiro00000,Maple Street Chiropractic,"Government Imposed Taxes, Fees, and Surcharges",Sales Tax,EXAMPLE CITY,CITY/TOWN/VILLAGE,,,,1.33,,,,loc_01k2maplestreetchiro000000,Maple Street Chiropractic
## fee activity
account_id,account_name,line_type,billing_type,service_start,service_end,row,date,count,sell_rate,amount,count_change,days_in_effect,days_in_period,location_id,location_name
acct_01k2maplestreetchiro00000,Maple Street Chiropractic,recovery_fee_regulatory,advance,2026-07-01,2026-07-31,baseline,2026-07-01,4,1.45,5.80,,31,31,loc_01k2maplestreetchiro000000,Maple Street Chiropractic
acct_01k2maplestreetchiro00000,Maple Street Chiropractic,recovery_fee_e911,advance,2026-07-01,2026-07-31,baseline,2026-07-01,3,0.50,1.50,,31,31,loc_01k2maplestreetchiro000000,Maple Street Chiropractic
## one-time charges
account_id,account_name,description,billing_type,service_start,service_end,quantity,unit_price,amount,location_id,location_name
## totals (USD)
field,value
subtotal_services,86.00
total_one_time_charges,0.00
total_taxes_fees_surcharges,12.97
total_government_taxes_fees_surcharges,5.67
total_other_fees_surcharges,7.30
total_due,98.97
A new account with two locations
Harborview Physical Therapy was set up on June 5 at Harborview Main with three users and a phone number. Harborview Main added phone numbers on June 10 and 20, and a user on June 8 who was removed on June 22. Eastside Clinic opened on June 15 with two users and a phone number.
Harborview's billing started on June 5, so its first bill, for July, also bills June from that day. Everything in service on July 1 is an advance baseline. Everything added in June is also a catchup change, and the changes stack. The Service Set-up Fee is arrears for June, the month the account started, on the account's first bill. The tables show sell amounts; buy amounts are in the JSON.
Harborview Main
billingType | Charge | Date | Change | count | Calculation | Sell |
|---|---|---|---|---|---|---|
advance | Users | Jul 1 | baseline | 3 | 3 × 20.00 | 60.00 |
advance | Phone numbers | Jul 1 | baseline | 3 | 3 × 2.00 | 6.00 |
catchup | Users | Jun 5 | +3 | 3 | 3 × 20.00 × 26 ÷ 30 | 52.00 |
catchup | Users | Jun 8 | +1 | 4 | 1 × 20.00 × 23 ÷ 30 | 15.33 |
catchup | Users | Jun 22 | −1 | 3 | −1 × 20.00 × 9 ÷ 30 | −6.00 |
catchup | Phone numbers | Jun 5 | +1 | 1 | 1 × 2.00 × 26 ÷ 30 | 1.73 |
catchup | Phone numbers | Jun 10 | +1 | 2 | 1 × 2.00 × 21 ÷ 30 | 1.40 |
catchup | Phone numbers | Jun 20 | +1 | 3 | 1 × 2.00 × 11 ÷ 30 | 0.73 |
arrears | Service Set-up Fee | 1 × 50.00 | 50.00 | |||
| Regulatory Cost Recovery Fee | 4.35 + 4.44 | 8.79 | ||||
| VoIP E-911 Service Fee | 1.50 + 0.96 | 2.46 | ||||
| Government-imposed taxes, fees, and surcharges | 9.83 | |||||
| Total due | 202.27 |
Each recovery fee is its advance amount plus its catch-up amount. The June 8 user was in service for 14 days: 15.33 − 6.00 = 9.33, which is 20.00 × 14 ÷ 30. The E-911 catch-up amount, 0.96, is the fee's rate on the three June phone numbers: 0.43 + 0.35 + 0.18.
Eastside Clinic
billingType | Charge | Date | Change | count | Calculation | Sell |
|---|---|---|---|---|---|---|
advance | Users | Jul 1 | baseline | 2 | 2 × 20.00 | 40.00 |
advance | Phone numbers | Jul 1 | baseline | 1 | 1 × 2.00 | 2.00 |
catchup | Users | Jun 15 | +2 | 2 | 2 × 20.00 × 16 ÷ 30 | 21.33 |
catchup | Phone numbers | Jun 15 | +1 | 1 | 1 × 2.00 × 16 ÷ 30 | 1.07 |
| Regulatory Cost Recovery Fee | 2.90 + 1.55 | 4.45 | ||||
| VoIP E-911 Service Fee | 0.50 + 0.27 | 0.77 | ||||
| Government-imposed taxes, fees, and surcharges | 3.85 | |||||
| Total due | 73.47 |
On the account, the June line item for phone numbers merges both locations: June 5, 10, and 20 from Harborview Main and June 15 from Eastside Clinic, with count running 1, 2, 3, 4. The account's total due, 275.74, is Harborview Main's 202.27 plus Eastside Clinic's 73.47.
JSON
{
"platformId": "platform_01k2spineline000000000",
"platformName": "Spineline",
"billingRunId": "billrun_01k2examplerun0000000000",
"billingPeriod": {
"start": "2026-07-01",
"end": "2026-07-31",
"daysInPeriod": 31
},
"generatedAt": "2026-07-02T14:00:00Z",
"accounts": [
{
"accountId": "acct_01k2harborviewpt00000000",
"accountName": "Harborview Physical Therapy",
"lineItems": [
{
"type": "user_seats",
"billingType": "advance",
"servicePeriod": {
"start": "2026-07-01",
"end": "2026-07-31"
},
"baseline": {
"date": "2026-07-01",
"count": 5,
"sellRate": 20,
"sellAmount": 100,
"buyRate": 8,
"buyAmount": 40,
"daysInEffect": 31,
"daysInPeriod": 31
},
"changes": [],
"sellSubtotal": 100,
"buySubtotal": 40
},
{
"type": "dids",
"billingType": "advance",
"servicePeriod": {
"start": "2026-07-01",
"end": "2026-07-31"
},
"baseline": {
"date": "2026-07-01",
"count": 4,
"sellRate": 2,
"sellAmount": 8,
"buyRate": 0.5,
"buyAmount": 2,
"daysInEffect": 31,
"daysInPeriod": 31
},
"changes": [],
"sellSubtotal": 8,
"buySubtotal": 2
},
{
"type": "user_seats",
"billingType": "catchup",
"servicePeriod": {
"start": "2026-06-01",
"end": "2026-06-30"
},
"baseline": {
"date": "2026-06-01",
"count": 0,
"sellRate": 20,
"sellAmount": 0,
"buyRate": 8,
"buyAmount": 0,
"daysInEffect": 30,
"daysInPeriod": 30
},
"changes": [
{
"date": "2026-06-05",
"count": 3,
"countChange": 3,
"sellAmount": 52,
"buyAmount": 20.8,
"daysInEffect": 26,
"daysInPeriod": 30
},
{
"date": "2026-06-08",
"count": 4,
"countChange": 1,
"sellAmount": 15.33,
"buyAmount": 6.13,
"daysInEffect": 23,
"daysInPeriod": 30
},
{
"date": "2026-06-15",
"count": 6,
"countChange": 2,
"sellAmount": 21.33,
"buyAmount": 8.53,
"daysInEffect": 16,
"daysInPeriod": 30
},
{
"date": "2026-06-22",
"count": 5,
"countChange": -1,
"sellAmount": -6,
"buyAmount": -2.4,
"daysInEffect": 9,
"daysInPeriod": 30
}
],
"sellSubtotal": 82.66,
"buySubtotal": 33.06
},
{
"type": "dids",
"billingType": "catchup",
"servicePeriod": {
"start": "2026-06-01",
"end": "2026-06-30"
},
"baseline": {
"date": "2026-06-01",
"count": 0,
"sellRate": 2,
"sellAmount": 0,
"buyRate": 0.5,
"buyAmount": 0,
"daysInEffect": 30,
"daysInPeriod": 30
},
"changes": [
{
"date": "2026-06-05",
"count": 1,
"countChange": 1,
"sellAmount": 1.73,
"buyAmount": 0.43,
"daysInEffect": 26,
"daysInPeriod": 30
},
{
"date": "2026-06-10",
"count": 2,
"countChange": 1,
"sellAmount": 1.4,
"buyAmount": 0.35,
"daysInEffect": 21,
"daysInPeriod": 30
},
{
"date": "2026-06-15",
"count": 3,
"countChange": 1,
"sellAmount": 1.07,
"buyAmount": 0.27,
"daysInEffect": 16,
"daysInPeriod": 30
},
{
"date": "2026-06-20",
"count": 4,
"countChange": 1,
"sellAmount": 0.73,
"buyAmount": 0.18,
"daysInEffect": 11,
"daysInPeriod": 30
}
],
"sellSubtotal": 4.93,
"buySubtotal": 1.23
}
],
"feeLineItems": [
{
"type": "recovery_fee_regulatory",
"billingType": "advance",
"servicePeriod": {
"start": "2026-07-01",
"end": "2026-07-31"
},
"baseline": {
"date": "2026-07-01",
"count": 5,
"sellRate": 1.45,
"sellAmount": 7.25,
"buyRate": 1.45,
"buyAmount": 7.25,
"daysInEffect": 31,
"daysInPeriod": 31
},
"changes": [],
"sellSubtotal": 7.25,
"buySubtotal": 7.25
},
{
"type": "recovery_fee_e911",
"billingType": "advance",
"servicePeriod": {
"start": "2026-07-01",
"end": "2026-07-31"
},
"baseline": {
"date": "2026-07-01",
"count": 4,
"sellRate": 0.5,
"sellAmount": 2,
"buyRate": 0.5,
"buyAmount": 2,
"daysInEffect": 31,
"daysInPeriod": 31
},
"changes": [],
"sellSubtotal": 2,
"buySubtotal": 2
},
{
"type": "recovery_fee_regulatory",
"billingType": "catchup",
"servicePeriod": {
"start": "2026-06-01",
"end": "2026-06-30"
},
"baseline": {
"date": "2026-06-01",
"count": 0,
"sellRate": 1.45,
"sellAmount": 0,
"buyRate": 1.45,
"buyAmount": 0,
"daysInEffect": 30,
"daysInPeriod": 30
},
"changes": [
{
"date": "2026-06-05",
"count": 3,
"countChange": 3,
"sellAmount": 3.77,
"buyAmount": 3.77,
"daysInEffect": 26,
"daysInPeriod": 30
},
{
"date": "2026-06-08",
"count": 4,
"countChange": 1,
"sellAmount": 1.11,
"buyAmount": 1.11,
"daysInEffect": 23,
"daysInPeriod": 30
},
{
"date": "2026-06-15",
"count": 6,
"countChange": 2,
"sellAmount": 1.55,
"buyAmount": 1.55,
"daysInEffect": 16,
"daysInPeriod": 30
},
{
"date": "2026-06-22",
"count": 5,
"countChange": -1,
"sellAmount": -0.44,
"buyAmount": -0.44,
"daysInEffect": 9,
"daysInPeriod": 30
}
],
"sellSubtotal": 5.99,
"buySubtotal": 5.99
},
{
"type": "recovery_fee_e911",
"billingType": "catchup",
"servicePeriod": {
"start": "2026-06-01",
"end": "2026-06-30"
},
"baseline": {
"date": "2026-06-01",
"count": 0,
"sellRate": 0.5,
"sellAmount": 0,
"buyRate": 0.5,
"buyAmount": 0,
"daysInEffect": 30,
"daysInPeriod": 30
},
"changes": [
{
"date": "2026-06-05",
"count": 1,
"countChange": 1,
"sellAmount": 0.43,
"buyAmount": 0.43,
"daysInEffect": 26,
"daysInPeriod": 30
},
{
"date": "2026-06-10",
"count": 2,
"countChange": 1,
"sellAmount": 0.35,
"buyAmount": 0.35,
"daysInEffect": 21,
"daysInPeriod": 30
},
{
"date": "2026-06-15",
"count": 3,
"countChange": 1,
"sellAmount": 0.27,
"buyAmount": 0.27,
"daysInEffect": 16,
"daysInPeriod": 30
},
{
"date": "2026-06-20",
"count": 4,
"countChange": 1,
"sellAmount": 0.18,
"buyAmount": 0.18,
"daysInEffect": 11,
"daysInPeriod": 30
}
],
"sellSubtotal": 1.23,
"buySubtotal": 1.23
}
],
"subtotalServices": 195.59,
"oneTimeCharges": [
{
"description": "Service Set-up Fee",
"billingType": "arrears",
"servicePeriod": {
"start": "2026-06-01",
"end": "2026-06-30"
},
"quantity": 1,
"unitPrice": 50,
"amount": 50
}
],
"totalOneTimeCharges": 50,
"taxesFeesAndSurcharges": [
{
"description": "Regulatory Cost Recovery Fee",
"category": "recovery_fee",
"lineType": "recovery_fee_regulatory",
"billingType": "advance",
"amount": 7.25
},
{
"description": "VoIP E-911 Service Fee",
"category": "recovery_fee",
"lineType": "recovery_fee_e911",
"billingType": "advance",
"amount": 2
},
{
"description": "Regulatory Cost Recovery Fee",
"category": "recovery_fee",
"lineType": "recovery_fee_regulatory",
"billingType": "catchup",
"amount": 5.99
},
{
"description": "VoIP E-911 Service Fee",
"category": "recovery_fee",
"lineType": "recovery_fee_e911",
"billingType": "catchup",
"amount": 1.23
},
{
"description": "Federal Universal Service Fund",
"category": "tax",
"taxAuthority": "FEDERAL",
"taxLevel": "FEDERAL",
"taxLevelCode": "1",
"taxType": "001",
"taxTypeDesc": "UNIVERSAL SERVICE FUND",
"amount": 6.35
},
{
"description": "State 911 Fee",
"category": "tax",
"taxAuthority": "EXAMPLE STATE",
"taxLevel": "STATE/PROVINCE",
"taxLevelCode": "2",
"taxType": "002",
"taxTypeDesc": "E911 FEE",
"amount": 4
},
{
"description": "Sales Tax",
"category": "tax",
"taxAuthority": "EXAMPLE CITY",
"taxLevel": "CITY/TOWN/VILLAGE",
"taxLevelCode": "4",
"taxType": "003",
"taxTypeDesc": "SALES TAX",
"amount": 2.46
},
{
"description": "Sales Tax",
"category": "tax",
"taxAuthority": "EXAMPLE TOWN",
"taxLevel": "CITY/TOWN/VILLAGE",
"taxLevelCode": "4",
"taxType": "003",
"taxTypeDesc": "SALES TAX",
"amount": 0.87
}
],
"totalTaxesFeesAndSurcharges": 30.15,
"totalRecoveryFees": 16.47,
"totalGovernmentTaxes": 13.68,
"totalDue": 275.74,
"locations": [
{
"locationId": "loc_01k2harborviewmain0000000",
"locationName": "Harborview Main",
"lineItems": [
{
"type": "user_seats",
"billingType": "advance",
"servicePeriod": {
"start": "2026-07-01",
"end": "2026-07-31"
},
"baseline": {
"date": "2026-07-01",
"count": 3,
"sellRate": 20,
"sellAmount": 60,
"buyRate": 8,
"buyAmount": 24,
"daysInEffect": 31,
"daysInPeriod": 31
},
"changes": [],
"sellSubtotal": 60,
"buySubtotal": 24
},
{
"type": "dids",
"billingType": "advance",
"servicePeriod": {
"start": "2026-07-01",
"end": "2026-07-31"
},
"baseline": {
"date": "2026-07-01",
"count": 3,
"sellRate": 2,
"sellAmount": 6,
"buyRate": 0.5,
"buyAmount": 1.5,
"daysInEffect": 31,
"daysInPeriod": 31
},
"changes": [],
"sellSubtotal": 6,
"buySubtotal": 1.5
},
{
"type": "user_seats",
"billingType": "catchup",
"servicePeriod": {
"start": "2026-06-01",
"end": "2026-06-30"
},
"baseline": {
"date": "2026-06-01",
"count": 0,
"sellRate": 20,
"sellAmount": 0,
"buyRate": 8,
"buyAmount": 0,
"daysInEffect": 30,
"daysInPeriod": 30
},
"changes": [
{
"date": "2026-06-05",
"count": 3,
"countChange": 3,
"sellAmount": 52,
"buyAmount": 20.8,
"daysInEffect": 26,
"daysInPeriod": 30
},
{
"date": "2026-06-08",
"count": 4,
"countChange": 1,
"sellAmount": 15.33,
"buyAmount": 6.13,
"daysInEffect": 23,
"daysInPeriod": 30
},
{
"date": "2026-06-22",
"count": 3,
"countChange": -1,
"sellAmount": -6,
"buyAmount": -2.4,
"daysInEffect": 9,
"daysInPeriod": 30
}
],
"sellSubtotal": 61.33,
"buySubtotal": 24.53
},
{
"type": "dids",
"billingType": "catchup",
"servicePeriod": {
"start": "2026-06-01",
"end": "2026-06-30"
},
"baseline": {
"date": "2026-06-01",
"count": 0,
"sellRate": 2,
"sellAmount": 0,
"buyRate": 0.5,
"buyAmount": 0,
"daysInEffect": 30,
"daysInPeriod": 30
},
"changes": [
{
"date": "2026-06-05",
"count": 1,
"countChange": 1,
"sellAmount": 1.73,
"buyAmount": 0.43,
"daysInEffect": 26,
"daysInPeriod": 30
},
{
"date": "2026-06-10",
"count": 2,
"countChange": 1,
"sellAmount": 1.4,
"buyAmount": 0.35,
"daysInEffect": 21,
"daysInPeriod": 30
},
{
"date": "2026-06-20",
"count": 3,
"countChange": 1,
"sellAmount": 0.73,
"buyAmount": 0.18,
"daysInEffect": 11,
"daysInPeriod": 30
}
],
"sellSubtotal": 3.86,
"buySubtotal": 0.96
}
],
"feeLineItems": [
{
"type": "recovery_fee_regulatory",
"billingType": "advance",
"servicePeriod": {
"start": "2026-07-01",
"end": "2026-07-31"
},
"baseline": {
"date": "2026-07-01",
"count": 3,
"sellRate": 1.45,
"sellAmount": 4.35,
"buyRate": 1.45,
"buyAmount": 4.35,
"daysInEffect": 31,
"daysInPeriod": 31
},
"changes": [],
"sellSubtotal": 4.35,
"buySubtotal": 4.35
},
{
"type": "recovery_fee_e911",
"billingType": "advance",
"servicePeriod": {
"start": "2026-07-01",
"end": "2026-07-31"
},
"baseline": {
"date": "2026-07-01",
"count": 3,
"sellRate": 0.5,
"sellAmount": 1.5,
"buyRate": 0.5,
"buyAmount": 1.5,
"daysInEffect": 31,
"daysInPeriod": 31
},
"changes": [],
"sellSubtotal": 1.5,
"buySubtotal": 1.5
},
{
"type": "recovery_fee_regulatory",
"billingType": "catchup",
"servicePeriod": {
"start": "2026-06-01",
"end": "2026-06-30"
},
"baseline": {
"date": "2026-06-01",
"count": 0,
"sellRate": 1.45,
"sellAmount": 0,
"buyRate": 1.45,
"buyAmount": 0,
"daysInEffect": 30,
"daysInPeriod": 30
},
"changes": [
{
"date": "2026-06-05",
"count": 3,
"countChange": 3,
"sellAmount": 3.77,
"buyAmount": 3.77,
"daysInEffect": 26,
"daysInPeriod": 30
},
{
"date": "2026-06-08",
"count": 4,
"countChange": 1,
"sellAmount": 1.11,
"buyAmount": 1.11,
"daysInEffect": 23,
"daysInPeriod": 30
},
{
"date": "2026-06-22",
"count": 3,
"countChange": -1,
"sellAmount": -0.44,
"buyAmount": -0.44,
"daysInEffect": 9,
"daysInPeriod": 30
}
],
"sellSubtotal": 4.44,
"buySubtotal": 4.44
},
{
"type": "recovery_fee_e911",
"billingType": "catchup",
"servicePeriod": {
"start": "2026-06-01",
"end": "2026-06-30"
},
"baseline": {
"date": "2026-06-01",
"count": 0,
"sellRate": 0.5,
"sellAmount": 0,
"buyRate": 0.5,
"buyAmount": 0,
"daysInEffect": 30,
"daysInPeriod": 30
},
"changes": [
{
"date": "2026-06-05",
"count": 1,
"countChange": 1,
"sellAmount": 0.43,
"buyAmount": 0.43,
"daysInEffect": 26,
"daysInPeriod": 30
},
{
"date": "2026-06-10",
"count": 2,
"countChange": 1,
"sellAmount": 0.35,
"buyAmount": 0.35,
"daysInEffect": 21,
"daysInPeriod": 30
},
{
"date": "2026-06-20",
"count": 3,
"countChange": 1,
"sellAmount": 0.18,
"buyAmount": 0.18,
"daysInEffect": 11,
"daysInPeriod": 30
}
],
"sellSubtotal": 0.96,
"buySubtotal": 0.96
}
],
"subtotalServices": 131.19,
"oneTimeCharges": [
{
"description": "Service Set-up Fee",
"billingType": "arrears",
"servicePeriod": {
"start": "2026-06-01",
"end": "2026-06-30"
},
"quantity": 1,
"unitPrice": 50,
"amount": 50
}
],
"totalOneTimeCharges": 50,
"taxesFeesAndSurcharges": [
{
"description": "Regulatory Cost Recovery Fee",
"category": "recovery_fee",
"lineType": "recovery_fee_regulatory",
"unit": "user_seat",
"billingType": "advance",
"amount": 4.35
},
{
"description": "VoIP E-911 Service Fee",
"category": "recovery_fee",
"lineType": "recovery_fee_e911",
"unit": "did",
"billingType": "advance",
"amount": 1.5
},
{
"description": "Regulatory Cost Recovery Fee",
"category": "recovery_fee",
"lineType": "recovery_fee_regulatory",
"unit": "user_seat",
"billingType": "catchup",
"amount": 4.44
},
{
"description": "VoIP E-911 Service Fee",
"category": "recovery_fee",
"lineType": "recovery_fee_e911",
"unit": "did",
"billingType": "catchup",
"amount": 0.96
},
{
"description": "Federal Universal Service Fund",
"category": "tax",
"taxAuthority": "FEDERAL",
"taxLevel": "FEDERAL",
"taxLevelCode": "1",
"taxType": "001",
"taxTypeDesc": "UNIVERSAL SERVICE FUND",
"amount": 4.37
},
{
"description": "State 911 Fee",
"category": "tax",
"taxAuthority": "EXAMPLE STATE",
"taxLevel": "STATE/PROVINCE",
"taxLevelCode": "2",
"taxType": "002",
"taxTypeDesc": "E911 FEE",
"amount": 3
},
{
"description": "Sales Tax",
"category": "tax",
"taxAuthority": "EXAMPLE CITY",
"taxLevel": "CITY/TOWN/VILLAGE",
"taxLevelCode": "4",
"taxType": "003",
"taxTypeDesc": "SALES TAX",
"amount": 2.46
}
],
"totalTaxesFeesAndSurcharges": 21.08,
"totalRecoveryFees": 11.25,
"totalGovernmentTaxes": 9.83,
"totalDue": 202.27
},
{
"locationId": "loc_01k2harbovieweastside0000",
"locationName": "Eastside Clinic",
"lineItems": [
{
"type": "user_seats",
"billingType": "advance",
"servicePeriod": {
"start": "2026-07-01",
"end": "2026-07-31"
},
"baseline": {
"date": "2026-07-01",
"count": 2,
"sellRate": 20,
"sellAmount": 40,
"buyRate": 8,
"buyAmount": 16,
"daysInEffect": 31,
"daysInPeriod": 31
},
"changes": [],
"sellSubtotal": 40,
"buySubtotal": 16
},
{
"type": "dids",
"billingType": "advance",
"servicePeriod": {
"start": "2026-07-01",
"end": "2026-07-31"
},
"baseline": {
"date": "2026-07-01",
"count": 1,
"sellRate": 2,
"sellAmount": 2,
"buyRate": 0.5,
"buyAmount": 0.5,
"daysInEffect": 31,
"daysInPeriod": 31
},
"changes": [],
"sellSubtotal": 2,
"buySubtotal": 0.5
},
{
"type": "user_seats",
"billingType": "catchup",
"servicePeriod": {
"start": "2026-06-01",
"end": "2026-06-30"
},
"baseline": {
"date": "2026-06-01",
"count": 0,
"sellRate": 20,
"sellAmount": 0,
"buyRate": 8,
"buyAmount": 0,
"daysInEffect": 30,
"daysInPeriod": 30
},
"changes": [
{
"date": "2026-06-15",
"count": 2,
"countChange": 2,
"sellAmount": 21.33,
"buyAmount": 8.53,
"daysInEffect": 16,
"daysInPeriod": 30
}
],
"sellSubtotal": 21.33,
"buySubtotal": 8.53
},
{
"type": "dids",
"billingType": "catchup",
"servicePeriod": {
"start": "2026-06-01",
"end": "2026-06-30"
},
"baseline": {
"date": "2026-06-01",
"count": 0,
"sellRate": 2,
"sellAmount": 0,
"buyRate": 0.5,
"buyAmount": 0,
"daysInEffect": 30,
"daysInPeriod": 30
},
"changes": [
{
"date": "2026-06-15",
"count": 1,
"countChange": 1,
"sellAmount": 1.07,
"buyAmount": 0.27,
"daysInEffect": 16,
"daysInPeriod": 30
}
],
"sellSubtotal": 1.07,
"buySubtotal": 0.27
}
],
"feeLineItems": [
{
"type": "recovery_fee_regulatory",
"billingType": "advance",
"servicePeriod": {
"start": "2026-07-01",
"end": "2026-07-31"
},
"baseline": {
"date": "2026-07-01",
"count": 2,
"sellRate": 1.45,
"sellAmount": 2.9,
"buyRate": 1.45,
"buyAmount": 2.9,
"daysInEffect": 31,
"daysInPeriod": 31
},
"changes": [],
"sellSubtotal": 2.9,
"buySubtotal": 2.9
},
{
"type": "recovery_fee_e911",
"billingType": "advance",
"servicePeriod": {
"start": "2026-07-01",
"end": "2026-07-31"
},
"baseline": {
"date": "2026-07-01",
"count": 1,
"sellRate": 0.5,
"sellAmount": 0.5,
"buyRate": 0.5,
"buyAmount": 0.5,
"daysInEffect": 31,
"daysInPeriod": 31
},
"changes": [],
"sellSubtotal": 0.5,
"buySubtotal": 0.5
},
{
"type": "recovery_fee_regulatory",
"billingType": "catchup",
"servicePeriod": {
"start": "2026-06-01",
"end": "2026-06-30"
},
"baseline": {
"date": "2026-06-01",
"count": 0,
"sellRate": 1.45,
"sellAmount": 0,
"buyRate": 1.45,
"buyAmount": 0,
"daysInEffect": 30,
"daysInPeriod": 30
},
"changes": [
{
"date": "2026-06-15",
"count": 2,
"countChange": 2,
"sellAmount": 1.55,
"buyAmount": 1.55,
"daysInEffect": 16,
"daysInPeriod": 30
}
],
"sellSubtotal": 1.55,
"buySubtotal": 1.55
},
{
"type": "recovery_fee_e911",
"billingType": "catchup",
"servicePeriod": {
"start": "2026-06-01",
"end": "2026-06-30"
},
"baseline": {
"date": "2026-06-01",
"count": 0,
"sellRate": 0.5,
"sellAmount": 0,
"buyRate": 0.5,
"buyAmount": 0,
"daysInEffect": 30,
"daysInPeriod": 30
},
"changes": [
{
"date": "2026-06-15",
"count": 1,
"countChange": 1,
"sellAmount": 0.27,
"buyAmount": 0.27,
"daysInEffect": 16,
"daysInPeriod": 30
}
],
"sellSubtotal": 0.27,
"buySubtotal": 0.27
}
],
"subtotalServices": 64.4,
"oneTimeCharges": [],
"totalOneTimeCharges": 0,
"taxesFeesAndSurcharges": [
{
"description": "Regulatory Cost Recovery Fee",
"category": "recovery_fee",
"lineType": "recovery_fee_regulatory",
"unit": "user_seat",
"billingType": "advance",
"amount": 2.9
},
{
"description": "VoIP E-911 Service Fee",
"category": "recovery_fee",
"lineType": "recovery_fee_e911",
"unit": "did",
"billingType": "advance",
"amount": 0.5
},
{
"description": "Regulatory Cost Recovery Fee",
"category": "recovery_fee",
"lineType": "recovery_fee_regulatory",
"unit": "user_seat",
"billingType": "catchup",
"amount": 1.55
},
{
"description": "VoIP E-911 Service Fee",
"category": "recovery_fee",
"lineType": "recovery_fee_e911",
"unit": "did",
"billingType": "catchup",
"amount": 0.27
},
{
"description": "Federal Universal Service Fund",
"category": "tax",
"taxAuthority": "FEDERAL",
"taxLevel": "FEDERAL",
"taxLevelCode": "1",
"taxType": "001",
"taxTypeDesc": "UNIVERSAL SERVICE FUND",
"amount": 1.98
},
{
"description": "State 911 Fee",
"category": "tax",
"taxAuthority": "EXAMPLE STATE",
"taxLevel": "STATE/PROVINCE",
"taxLevelCode": "2",
"taxType": "002",
"taxTypeDesc": "E911 FEE",
"amount": 1
},
{
"description": "Sales Tax",
"category": "tax",
"taxAuthority": "EXAMPLE TOWN",
"taxLevel": "CITY/TOWN/VILLAGE",
"taxLevelCode": "4",
"taxType": "003",
"taxTypeDesc": "SALES TAX",
"amount": 0.87
}
],
"totalTaxesFeesAndSurcharges": 9.07,
"totalRecoveryFees": 5.22,
"totalGovernmentTaxes": 3.85,
"totalDue": 73.47
}
]
}
],
"totals": {
"subtotalServices": 195.59,
"totalOneTimeCharges": 50,
"totalTaxesFeesAndSurcharges": 30.15,
"totalRecoveryFees": 16.47,
"totalGovernmentTaxes": 13.68,
"totalDue": 275.74
}
}
CSV
## summary
field,value
Platform name,Spineline
Platform ID,platform_01k2spineline000000000
Billing run,billrun_01k2examplerun0000000000
Period start,2026-07-01
Period end,2026-07-31
Days in period,31
Generated,2026-07-02T14:00:00Z
Total accounts,1
## accounts
account_id,account_name,user_seats_start,user_seats_end,user_seats_count,user_seats_full_month,user_seats,dids_start,dids_end,dids_count,dids_full_month,dids,voiceai_start,voiceai_end,voiceai_count,voiceai_full_month,voiceai_locations,subtotal_services,one_time_charges,taxes_fees_surcharges,total_due,government_taxes_fees_surcharges,other_fees_surcharges,catch_up_services,location_id,location_name
acct_01k2harborviewpt00000000,Harborview Physical Therapy,3,3,3,60.00,60.00,3,3,3,6.00,6.00,0,0,0,0.00,0.00,131.19,50.00,21.08,202.27,9.83,11.25,65.19,loc_01k2harborviewmain0000000,Harborview Main
acct_01k2harborviewpt00000000,Harborview Physical Therapy,2,2,2,40.00,40.00,1,1,1,2.00,2.00,0,0,0,0.00,0.00,64.40,0.00,9.07,73.47,3.85,5.22,22.40,loc_01k2harbovieweastside0000,Eastside Clinic
## activity
account_id,account_name,line_type,billing_type,service_start,service_end,row,date,count,sell_rate,amount,count_change,days_in_effect,days_in_period,location_id,location_name
acct_01k2harborviewpt00000000,Harborview Physical Therapy,user_seats,advance,2026-07-01,2026-07-31,baseline,2026-07-01,3,20.00,60.00,,31,31,loc_01k2harborviewmain0000000,Harborview Main
acct_01k2harborviewpt00000000,Harborview Physical Therapy,dids,advance,2026-07-01,2026-07-31,baseline,2026-07-01,3,2.00,6.00,,31,31,loc_01k2harborviewmain0000000,Harborview Main
acct_01k2harborviewpt00000000,Harborview Physical Therapy,user_seats,catchup,2026-06-01,2026-06-30,change,2026-06-05,3,20.00,52.00,+3,26,30,loc_01k2harborviewmain0000000,Harborview Main
acct_01k2harborviewpt00000000,Harborview Physical Therapy,user_seats,catchup,2026-06-01,2026-06-30,change,2026-06-08,4,20.00,15.33,+1,23,30,loc_01k2harborviewmain0000000,Harborview Main
acct_01k2harborviewpt00000000,Harborview Physical Therapy,user_seats,catchup,2026-06-01,2026-06-30,change,2026-06-22,3,20.00,-6.00,-1,9,30,loc_01k2harborviewmain0000000,Harborview Main
acct_01k2harborviewpt00000000,Harborview Physical Therapy,dids,catchup,2026-06-01,2026-06-30,change,2026-06-05,1,2.00,1.73,+1,26,30,loc_01k2harborviewmain0000000,Harborview Main
acct_01k2harborviewpt00000000,Harborview Physical Therapy,dids,catchup,2026-06-01,2026-06-30,change,2026-06-10,2,2.00,1.40,+1,21,30,loc_01k2harborviewmain0000000,Harborview Main
acct_01k2harborviewpt00000000,Harborview Physical Therapy,dids,catchup,2026-06-01,2026-06-30,change,2026-06-20,3,2.00,0.73,+1,11,30,loc_01k2harborviewmain0000000,Harborview Main
acct_01k2harborviewpt00000000,Harborview Physical Therapy,user_seats,advance,2026-07-01,2026-07-31,baseline,2026-07-01,2,20.00,40.00,,31,31,loc_01k2harbovieweastside0000,Eastside Clinic
acct_01k2harborviewpt00000000,Harborview Physical Therapy,dids,advance,2026-07-01,2026-07-31,baseline,2026-07-01,1,2.00,2.00,,31,31,loc_01k2harbovieweastside0000,Eastside Clinic
acct_01k2harborviewpt00000000,Harborview Physical Therapy,user_seats,catchup,2026-06-01,2026-06-30,change,2026-06-15,2,20.00,21.33,+2,16,30,loc_01k2harbovieweastside0000,Eastside Clinic
acct_01k2harborviewpt00000000,Harborview Physical Therapy,dids,catchup,2026-06-01,2026-06-30,change,2026-06-15,1,2.00,1.07,+1,16,30,loc_01k2harbovieweastside0000,Eastside Clinic
## taxes and fees
account_id,account_name,group,description,tax_authority,tax_level,unit,unit_price,units,amount,billing_type,service_start,service_end,location_id,location_name
acct_01k2harborviewpt00000000,Harborview Physical Therapy,Other Fees and Surcharges,Regulatory Cost Recovery Fee,,,user_seat,,,4.35,advance,2026-07-01,2026-07-31,loc_01k2harborviewmain0000000,Harborview Main
acct_01k2harborviewpt00000000,Harborview Physical Therapy,Other Fees and Surcharges,VoIP E-911 Service Fee,,,did,,,1.50,advance,2026-07-01,2026-07-31,loc_01k2harborviewmain0000000,Harborview Main
acct_01k2harborviewpt00000000,Harborview Physical Therapy,Other Fees and Surcharges,Regulatory Cost Recovery Fee,,,user_seat,,,4.44,catchup,2026-06-01,2026-06-30,loc_01k2harborviewmain0000000,Harborview Main
acct_01k2harborviewpt00000000,Harborview Physical Therapy,Other Fees and Surcharges,VoIP E-911 Service Fee,,,did,,,0.96,catchup,2026-06-01,2026-06-30,loc_01k2harborviewmain0000000,Harborview Main
acct_01k2harborviewpt00000000,Harborview Physical Therapy,"Government Imposed Taxes, Fees, and Surcharges",Federal Universal Service Fund,FEDERAL,FEDERAL,,,,4.37,,,,loc_01k2harborviewmain0000000,Harborview Main
acct_01k2harborviewpt00000000,Harborview Physical Therapy,"Government Imposed Taxes, Fees, and Surcharges",State 911 Fee,EXAMPLE STATE,STATE/PROVINCE,,,,3.00,,,,loc_01k2harborviewmain0000000,Harborview Main
acct_01k2harborviewpt00000000,Harborview Physical Therapy,"Government Imposed Taxes, Fees, and Surcharges",Sales Tax,EXAMPLE CITY,CITY/TOWN/VILLAGE,,,,2.46,,,,loc_01k2harborviewmain0000000,Harborview Main
acct_01k2harborviewpt00000000,Harborview Physical Therapy,Other Fees and Surcharges,Regulatory Cost Recovery Fee,,,user_seat,,,2.90,advance,2026-07-01,2026-07-31,loc_01k2harbovieweastside0000,Eastside Clinic
acct_01k2harborviewpt00000000,Harborview Physical Therapy,Other Fees and Surcharges,VoIP E-911 Service Fee,,,did,,,0.50,advance,2026-07-01,2026-07-31,loc_01k2harbovieweastside0000,Eastside Clinic
acct_01k2harborviewpt00000000,Harborview Physical Therapy,Other Fees and Surcharges,Regulatory Cost Recovery Fee,,,user_seat,,,1.55,catchup,2026-06-01,2026-06-30,loc_01k2harbovieweastside0000,Eastside Clinic
acct_01k2harborviewpt00000000,Harborview Physical Therapy,Other Fees and Surcharges,VoIP E-911 Service Fee,,,did,,,0.27,catchup,2026-06-01,2026-06-30,loc_01k2harbovieweastside0000,Eastside Clinic
acct_01k2harborviewpt00000000,Harborview Physical Therapy,"Government Imposed Taxes, Fees, and Surcharges",Federal Universal Service Fund,FEDERAL,FEDERAL,,,,1.98,,,,loc_01k2harbovieweastside0000,Eastside Clinic
acct_01k2harborviewpt00000000,Harborview Physical Therapy,"Government Imposed Taxes, Fees, and Surcharges",State 911 Fee,EXAMPLE STATE,STATE/PROVINCE,,,,1.00,,,,loc_01k2harbovieweastside0000,Eastside Clinic
acct_01k2harborviewpt00000000,Harborview Physical Therapy,"Government Imposed Taxes, Fees, and Surcharges",Sales Tax,EXAMPLE TOWN,CITY/TOWN/VILLAGE,,,,0.87,,,,loc_01k2harbovieweastside0000,Eastside Clinic
## fee activity
account_id,account_name,line_type,billing_type,service_start,service_end,row,date,count,sell_rate,amount,count_change,days_in_effect,days_in_period,location_id,location_name
acct_01k2harborviewpt00000000,Harborview Physical Therapy,recovery_fee_regulatory,advance,2026-07-01,2026-07-31,baseline,2026-07-01,3,1.45,4.35,,31,31,loc_01k2harborviewmain0000000,Harborview Main
acct_01k2harborviewpt00000000,Harborview Physical Therapy,recovery_fee_e911,advance,2026-07-01,2026-07-31,baseline,2026-07-01,3,0.50,1.50,,31,31,loc_01k2harborviewmain0000000,Harborview Main
acct_01k2harborviewpt00000000,Harborview Physical Therapy,recovery_fee_regulatory,catchup,2026-06-01,2026-06-30,change,2026-06-05,3,1.45,3.77,+3,26,30,loc_01k2harborviewmain0000000,Harborview Main
acct_01k2harborviewpt00000000,Harborview Physical Therapy,recovery_fee_regulatory,catchup,2026-06-01,2026-06-30,change,2026-06-08,4,1.45,1.11,+1,23,30,loc_01k2harborviewmain0000000,Harborview Main
acct_01k2harborviewpt00000000,Harborview Physical Therapy,recovery_fee_regulatory,catchup,2026-06-01,2026-06-30,change,2026-06-22,3,1.45,-0.44,-1,9,30,loc_01k2harborviewmain0000000,Harborview Main
acct_01k2harborviewpt00000000,Harborview Physical Therapy,recovery_fee_e911,catchup,2026-06-01,2026-06-30,change,2026-06-05,1,0.50,0.43,+1,26,30,loc_01k2harborviewmain0000000,Harborview Main
acct_01k2harborviewpt00000000,Harborview Physical Therapy,recovery_fee_e911,catchup,2026-06-01,2026-06-30,change,2026-06-10,2,0.50,0.35,+1,21,30,loc_01k2harborviewmain0000000,Harborview Main
acct_01k2harborviewpt00000000,Harborview Physical Therapy,recovery_fee_e911,catchup,2026-06-01,2026-06-30,change,2026-06-20,3,0.50,0.18,+1,11,30,loc_01k2harborviewmain0000000,Harborview Main
acct_01k2harborviewpt00000000,Harborview Physical Therapy,recovery_fee_regulatory,advance,2026-07-01,2026-07-31,baseline,2026-07-01,2,1.45,2.90,,31,31,loc_01k2harbovieweastside0000,Eastside Clinic
acct_01k2harborviewpt00000000,Harborview Physical Therapy,recovery_fee_e911,advance,2026-07-01,2026-07-31,baseline,2026-07-01,1,0.50,0.50,,31,31,loc_01k2harbovieweastside0000,Eastside Clinic
acct_01k2harborviewpt00000000,Harborview Physical Therapy,recovery_fee_regulatory,catchup,2026-06-01,2026-06-30,change,2026-06-15,2,1.45,1.55,+2,16,30,loc_01k2harbovieweastside0000,Eastside Clinic
acct_01k2harborviewpt00000000,Harborview Physical Therapy,recovery_fee_e911,catchup,2026-06-01,2026-06-30,change,2026-06-15,1,0.50,0.27,+1,16,30,loc_01k2harbovieweastside0000,Eastside Clinic
## one-time charges
account_id,account_name,description,billing_type,service_start,service_end,quantity,unit_price,amount,location_id,location_name
acct_01k2harborviewpt00000000,Harborview Physical Therapy,Service Set-up Fee,arrears,2026-06-01,2026-06-30,1,50.00,50.00,loc_01k2harborviewmain0000000,Harborview Main
## totals (USD)
field,value
subtotal_services,195.59
total_one_time_charges,50.00
total_taxes_fees_surcharges,30.15
total_government_taxes_fees_surcharges,13.68
total_other_fees_surcharges,16.47
total_due,275.74
Taxes, fees, and surcharges
Every bill has two groups of taxes, fees, and surcharges. Keep them separate on your customers' bills: the regulatory fees page tells your customers they will see them as separate line items.
category | Group label | What it is |
|---|---|---|
recovery_fee | Other Fees and Surcharges | DialStack's cost recovery fees |
tax | Government Imposed Taxes, Fees, and Surcharges | Taxes, fees, and surcharges imposed by government agencies |
Recovery fees. For what they are, see Regulatory Fees and Taxes.
| Description | lineType | unit | Charged per |
|---|---|---|---|
| Regulatory Cost Recovery Fee | recovery_fee_regulatory | user_seat | User, per month |
| VoIP E-911 Service Fee | recovery_fee_e911 | did | Phone number, per month |
A fee's line item in feeLineItems has the same baseline and changes as the line item it applies to, at the fee's rate. Its entry in taxesFeesAndSurcharges is that line item's total, and names it by lineType and billingType. So a fee has one entry per billingType.
Government-imposed taxes, fees, and surcharges are calculated for each location from its service address, on the billing month's charges, catch-up included. On the account, entries with the same description, authority, level, and type are combined across locations. They have no line items and no billingType.
Flat per-line government-imposed charges, such as 911 fees, are calculated on the highest count of each line item at each location, and are not prorated. In the example above, Harborview Main's June line item for phone numbers counts as 3.
Account billing files
The JSON and CSV carry the same data. The tables below give each JSON field and, where the CSV has it, the matching CSV column.
The CSV is laid out like this:
- Each section starts with a
## <name>marker row and its own header row. - Every row in
## accounts,## activity,## taxes and fees,## fee activity, and## one-time chargesbelongs to one location. The first two columns areaccount_idandaccount_name, and the last two arelocation_idandlocation_name. There is no account row: group byaccount_id. - Baselines with a
countof0are left out. - For each location,
## activitysums tosubtotal_services,## fee activitytoother_fees_surcharges,## taxes and feestotaxes_fees_surcharges, and## one-time chargestoone_time_charges. - Every section is present in every file. A section with nothing in it has only its header row.
- Amounts have two decimal places. A cell that doesn't apply is empty.
Read columns by header name, key on IDs rather than names or order, and parse amounts as decimals.
File
| JSON field | CSV | Description |
|---|---|---|
platformId | ## summary Platform ID | Your platform's ID |
platformName | ## summary Platform name | Your platform's name |
billingRunId | ## summary Billing run | The run that produced the files, shared by all six |
billingPeriod | ## summary Period start, end | start, end (inclusive), and daysInPeriod |
generatedAt | ## summary Generated | When the file was produced (RFC 3339, UTC) |
accounts | one or more rows per account | Billed accounts |
totals | ## totals (USD) | Sums of the accounts' fields of the same name |
Account and location
A location has the same fields as its account, minus accountId, accountName, notes, and locations, plus locationId and locationName. On a location, oneTimeCharges is always present, and recovery fee entries carry unit.
| JSON field | CSV (## accounts) | Description |
|---|---|---|
accountId, accountName | account_id, account_name | |
locationId, locationName | location_id, location_name | |
lineItems | ## activity | Service line items |
feeLineItems | ## fee activity | Recovery fee line items |
subtotalServices | subtotal_services | Sum of lineItems[].sellSubtotal |
oneTimeCharges | ## one-time charges | Non-recurring charges. Omitted on an account without any. |
totalOneTimeCharges | one_time_charges | Sum of oneTimeCharges[].amount |
taxesFeesAndSurcharges | ## taxes and fees | Entries: recovery fees, then government-imposed, federal to local |
totalRecoveryFees | other_fees_surcharges | Sum of the recovery_fee entries |
totalGovernmentTaxes | government_taxes_fees_surcharges | Sum of the tax entries |
totalTaxesFeesAndSurcharges | taxes_fees_surcharges | totalRecoveryFees + totalGovernmentTaxes |
totalDue | total_due | subtotalServices + totalOneTimeCharges + totalTaxesFeesAndSurcharges |
notes | Free-text notes. Omitted when there are none. | |
locations | one row per location | See Locations |
## accounts also has columns for the advance charges by type, each set of five being _start, _end, _count (same as _end), _full_month (count × rate), and the amount: user_seats_*, dids_*, and voiceai_*. catch_up_services is all catch-up charges, so user_seats + dids + voiceai_locations + catch_up_services = subtotal_services.
Line item
| JSON field | CSV (## activity, ## fee activity) | Description |
|---|---|---|
type | line_type | See line types |
billingType | billing_type | advance or catchup |
servicePeriod | service_start, service_end | The period the line item bills |
baseline | a row with row = baseline | See below |
changes | a row per change, row = change | In date order. Empty when nothing changed. |
sellSubtotal | sum of amount | Baseline plus changes, at sell |
buySubtotal | Baseline plus changes, at buy |
Fields of the baseline and each change. The rate doesn't change within a line item today. If it ever does, the change will carry the new sellRate and buyRate, and its amount will be (count × new rate − previous count × previous rate) × daysInEffect ÷ daysInPeriod.
| JSON field | CSV | Description |
|---|---|---|
date | date | The service period's first day, or the day the change took effect |
count | count | In service on that date, or after the change |
countChange | count_change | Changes only: the step, such as 1 or -1. Signed in the CSV (+1). |
sellRate | sell_rate | Monthly sell rate, on the baseline. The CSV repeats it on every row. |
sellAmount | amount | See Line items and amounts |
buyRate | Monthly buy rate, like sellRate | |
buyAmount | Buy amount | |
daysInEffect | days_in_effect | Days from date to the end of the service period, inclusive |
daysInPeriod | days_in_period | Days in the service period |
Line types
type | Name on the PDF | Counts |
|---|---|---|
user_seats | UCaaS User License | Users |
dids | Local DID | Phone numbers |
voiceai_locations | Managed VoiceAI Location | Locations billed for Managed VoiceAI while the account has a Managed VoiceAI agent |
Recovery fee line items use the fee's lineType as their type. Their buy and sell figures are equal.
Non-recurring charge
| JSON field | CSV (## one-time charges) | Description |
|---|---|---|
description | description | The name to show on a bill, such as Service Set-up Fee |
billingType | billing_type | arrears |
servicePeriod | service_start, service_end | The month the charge is for: the prior month |
quantity | quantity | |
unitPrice | unit_price | |
amount | amount | quantity × unitPrice |
Tax and fee entry
| JSON field | CSV (## taxes and fees) | Description |
|---|---|---|
description | description | The name to show on a bill |
category | group | recovery_fee or tax; the CSV has the group label |
amount | amount | |
lineType | Recovery fees: the feeLineItems line item this totals, with billingType | |
billingType | billing_type | Recovery fees: advance or catchup |
service_start, service_end | Recovery fees: the line item's service period | |
unit | unit | Recovery fees on a location: user_seat or did |
taxAuthority | tax_authority | Government-imposed: the authority that imposes it |
taxLevel | tax_level | Government-imposed: the jurisdiction level, such as FEDERAL, STATE/PROVINCE, COUNTY, or CITY/TOWN/VILLAGE. Levels can change with the regulatory environment. |
taxLevelCode | Government-imposed: the level as a number, 1 (federal) to 5 (district) | |
taxType | Government-imposed: a code for the kind of charge | |
taxTypeDesc | Government-imposed: the kind of charge, in words |
The CSV's unit_price and units columns are always empty. Two government-imposed entries can share a description; tell them apart by taxAuthority and taxLevel.
Platform billing files
The platform billing files sum your accounts' service charges at the buy rate, by type, separately for advance and catch-up, and pass through the taxes, fees, and surcharges from the account billing files. They have no account or location detail. The example covers both accounts above.
JSON
{
"platformId": "platform_01k2spineline000000000",
"platformName": "Spineline",
"billingRunId": "billrun_01k2examplerun0000000000",
"billingPeriod": {
"start": "2026-07-01",
"end": "2026-07-31",
"daysInPeriod": 31
},
"generatedAt": "2026-07-02T14:00:00Z",
"totalAccounts": 2,
"serviceCharges": {
"advance": {
"servicePeriod": {
"start": "2026-07-01",
"end": "2026-07-31",
"daysInPeriod": 31
},
"userSeats": {
"buyRate": 8,
"startCount": 9,
"additions": 0,
"reductions": 0,
"endCount": 9,
"subtotal": 72
},
"dids": {
"buyRate": 0.5,
"startCount": 7,
"additions": 0,
"reductions": 0,
"endCount": 7,
"subtotal": 3.5
},
"voiceaiLocations": {
"buyRate": 0,
"startCount": 0,
"additions": 0,
"reductions": 0,
"endCount": 0,
"subtotal": 0
}
},
"catchup": {
"servicePeriod": {
"start": "2026-06-01",
"end": "2026-06-30",
"daysInPeriod": 30
},
"userSeats": {
"buyRate": 8,
"startCount": 0,
"additions": 6,
"reductions": 1,
"endCount": 5,
"subtotal": 33.06
},
"dids": {
"buyRate": 0.5,
"startCount": 0,
"additions": 4,
"reductions": 0,
"endCount": 4,
"subtotal": 1.23
},
"voiceaiLocations": {
"buyRate": 0,
"startCount": 0,
"additions": 0,
"reductions": 0,
"endCount": 0,
"subtotal": 0
}
}
},
"subtotalServices": 109.79,
"totalOneTimeCharges": 50,
"totalTaxesFeesAndSurchargesPassthrough": 43.12,
"totalRecoveryFeesPassthrough": 23.77,
"totalGovernmentTaxesPassthrough": 19.35,
"otherFeesAndSurcharges": [
{
"description": "Regulatory Cost Recovery Fee",
"category": "recovery_fee",
"billingType": "advance",
"amount": 13.05
},
{
"description": "VoIP E-911 Service Fee",
"category": "recovery_fee",
"billingType": "advance",
"amount": 3.5
},
{
"description": "Regulatory Cost Recovery Fee",
"category": "recovery_fee",
"billingType": "catchup",
"amount": 5.99
},
{
"description": "VoIP E-911 Service Fee",
"category": "recovery_fee",
"billingType": "catchup",
"amount": 1.23
}
],
"totalDue": 202.91
}
CSV
## summary
field,value
Bill To,Spineline
Platform ID,platform_01k2spineline000000000
Billing run,billrun_01k2examplerun0000000000
Period start,2026-07-01
Period end,2026-07-31
Days in period,31
Generated,2026-07-02T14:00:00Z
Total accounts,2
## service charges: advance (2026-07-01 to 2026-07-31)
kind,buy_rate,starting_count,additions,reductions,ending_count,subtotal
user_seat,8.0000,9,0,0,9,72.00
did,0.5000,7,0,0,7,3.50
voiceai_loc,0.0000,0,0,0,0,0.00
## service charges: catch-up (2026-06-01 to 2026-06-30)
kind,buy_rate,starting_count,additions,reductions,ending_count,subtotal
user_seat,8.0000,0,6,1,5,33.06
did,0.5000,0,4,0,4,1.23
voiceai_loc,0.0000,0,0,0,0,0.00
## other fees and surcharges
description,unit,unit_price,units,amount,billing_type
Regulatory Cost Recovery Fee,,,,13.05,advance
VoIP E-911 Service Fee,,,,3.50,advance
Regulatory Cost Recovery Fee,,,,5.99,catchup
VoIP E-911 Service Fee,,,,1.23,catchup
## totals (USD)
field,value
subtotal_services,109.79
total_one_time_charges,50.00
total_taxes_fees_surcharges_passthrough,43.12
total_recovery_fees_passthrough,23.77
total_government_taxes_passthrough,19.35
total_due,202.91
| JSON field | CSV | Description |
|---|---|---|
platformId … generatedAt | ## summary | As in the account billing files, except that the CSV labels the platform name Bill To |
totalAccounts | ## summary Total accounts | Accounts billed |
serviceCharges.advance, .catchup | ## service charges: advance, : catch-up | One bucket each for userSeats, dids, voiceaiLocations. catchup is omitted when there is none. |
otherFeesAndSurcharges | ## other fees and surcharges | Recovery fees, one entry per fee and billingType |
subtotalServices | ## totals (USD) subtotal_services | Sum of the bucket subtotals |
totalOneTimeCharges | total_one_time_charges | From the account billing files |
totalTaxesFeesAndSurchargesPassthrough | total_taxes_fees_surcharges_passthrough | From the account billing files |
totalRecoveryFeesPassthrough | total_recovery_fees_passthrough | From the account billing files |
totalGovernmentTaxesPassthrough | total_government_taxes_passthrough | From the account billing files |
totalDue | total_due | subtotalServices + totalOneTimeCharges + totalTaxesFeesAndSurchargesPassthrough |
Each bucket has startCount, additions, reductions, and endCount (startCount + additions − reductions), across the platform; subtotal, the sum of the matching buySubtotals in the account billing files; and buyRate, an average for information only.
Compatibility
Changes to the files are additive. New fields, new CSV columns at the end of a section, new sections, and new values in existing fields (such as a new line type) can appear at any time, so ignore what you don't recognize. Fields and columns are not renamed, removed, moved, or given a new meaning in place. If a shape has to change, the new form appears alongside the old one, which stays until a later change announced in advance, and the change is listed below.
The platform CSV's service charge markers carry the service period, so match them on the ## service charges prefix.
Format changelog
2026-10-01
First published version, used from the October 2026 billing run. Differences from earlier sample files:
- Each account carries a
locationsbreakdown. In the account CSV,location_idandlocation_nameare the last two columns, with one row per location. - Recovery fees have their own line items, in
feeLineItemsand## fee activity. Fee entries dropunitPriceandunitsand gainlineTypeandbillingType, with one entry perbillingType. - Baselines and changes carry
daysInEffectanddaysInPeriod, and changes carrycountChange, with matching CSV columns. ## accountsgainscatch_up_services.- The account CSV gains a
## one-time chargessection. - The Service Set-up Fee's
servicePeriodis the prior month, the month the account started, rather than the billing month. ItsbillingTypeis stillarrears. - The platform CSV's service charge markers use a colon:
## service charges: advance (…)and## service charges: catch-up (…). They used a dash. - Every amount is rounded once and every total is a plain sum, so some amounts differ by a cent from earlier samples.
Related Resources
- Regulatory Fees and Taxes: what the recovery fees are
- Billable count changes: webhook events for changes to billed counts as they happen
- Locations: service locations