Skip to main content

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​

FilesWhat they tell youPrices
Account billing filesWhat to collect from each of your customers: every charge for every billed account, broken down by location.Sell and buy rates
Platform billing filesWhat 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:

billingTypeWhat it billsService period
advanceRecurring charges for the billing month, paid ahead, for everything in service on its first day. Not prorated.The billing month
catchupRecurring charges for the prior month, for resources added during it, prorated from the day each was added.The prior month
arrearsNon-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.

Text
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:

ChargeCalculationSellBuy
Users4 × 20.0080.0032.00
Phone numbers3 × 2.006.001.50
Regulatory Cost Recovery Fee4 × 1.455.80
VoIP E-911 Service Fee3 × 0.501.50
Government-imposed taxes, fees, and surcharges5.67
Total due98.97
JSON
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
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

billingTypeChargeDateChangecountCalculationSell
advanceUsersJul 1baseline33 × 20.0060.00
advancePhone numbersJul 1baseline33 × 2.006.00
catchupUsersJun 5+333 × 20.00 × 26 ÷ 3052.00
catchupUsersJun 8+141 × 20.00 × 23 ÷ 3015.33
catchupUsersJun 22−13−1 × 20.00 × 9 ÷ 30−6.00
catchupPhone numbersJun 5+111 × 2.00 × 26 ÷ 301.73
catchupPhone numbersJun 10+121 × 2.00 × 21 ÷ 301.40
catchupPhone numbersJun 20+131 × 2.00 × 11 ÷ 300.73
arrearsService Set-up Fee1 × 50.0050.00
Regulatory Cost Recovery Fee4.35 + 4.448.79
VoIP E-911 Service Fee1.50 + 0.962.46
Government-imposed taxes, fees, and surcharges9.83
Total due202.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

billingTypeChargeDateChangecountCalculationSell
advanceUsersJul 1baseline22 × 20.0040.00
advancePhone numbersJul 1baseline11 × 2.002.00
catchupUsersJun 15+222 × 20.00 × 16 ÷ 3021.33
catchupPhone numbersJun 15+111 × 2.00 × 16 ÷ 301.07
Regulatory Cost Recovery Fee2.90 + 1.554.45
VoIP E-911 Service Fee0.50 + 0.270.77
Government-imposed taxes, fees, and surcharges3.85
Total due73.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
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
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.

categoryGroup labelWhat it is
recovery_feeOther Fees and SurchargesDialStack's cost recovery fees
taxGovernment Imposed Taxes, Fees, and SurchargesTaxes, fees, and surcharges imposed by government agencies

Recovery fees. For what they are, see Regulatory Fees and Taxes.

DescriptionlineTypeunitCharged per
Regulatory Cost Recovery Feerecovery_fee_regulatoryuser_seatUser, per month
VoIP E-911 Service Feerecovery_fee_e911didPhone 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 charges belongs to one location. The first two columns are account_id and account_name, and the last two are location_id and location_name. There is no account row: group by account_id.
  • Baselines with a count of 0 are left out.
  • For each location, ## activity sums to subtotal_services, ## fee activity to other_fees_surcharges, ## taxes and fees to taxes_fees_surcharges, and ## one-time charges to one_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 fieldCSVDescription
platformId## summary Platform IDYour platform's ID
platformName## summary Platform nameYour platform's name
billingRunId## summary Billing runThe run that produced the files, shared by all six
billingPeriod## summary Period start, endstart, end (inclusive), and daysInPeriod
generatedAt## summary GeneratedWhen the file was produced (RFC 3339, UTC)
accountsone or more rows per accountBilled 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 fieldCSV (## accounts)Description
accountId, accountNameaccount_id, account_name
locationId, locationNamelocation_id, location_name
lineItems## activityService line items
feeLineItems## fee activityRecovery fee line items
subtotalServicessubtotal_servicesSum of lineItems[].sellSubtotal
oneTimeCharges## one-time chargesNon-recurring charges. Omitted on an account without any.
totalOneTimeChargesone_time_chargesSum of oneTimeCharges[].amount
taxesFeesAndSurcharges## taxes and feesEntries: recovery fees, then government-imposed, federal to local
totalRecoveryFeesother_fees_surchargesSum of the recovery_fee entries
totalGovernmentTaxesgovernment_taxes_fees_surchargesSum of the tax entries
totalTaxesFeesAndSurchargestaxes_fees_surchargestotalRecoveryFees + totalGovernmentTaxes
totalDuetotal_duesubtotalServices + totalOneTimeCharges + totalTaxesFeesAndSurcharges
notesFree-text notes. Omitted when there are none.
locationsone row per locationSee 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 fieldCSV (## activity, ## fee activity)Description
typeline_typeSee line types
billingTypebilling_typeadvance or catchup
servicePeriodservice_start, service_endThe period the line item bills
baselinea row with row = baselineSee below
changesa row per change, row = changeIn date order. Empty when nothing changed.
sellSubtotalsum of amountBaseline plus changes, at sell
buySubtotalBaseline 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 fieldCSVDescription
datedateThe service period's first day, or the day the change took effect
countcountIn service on that date, or after the change
countChangecount_changeChanges only: the step, such as 1 or -1. Signed in the CSV (+1).
sellRatesell_rateMonthly sell rate, on the baseline. The CSV repeats it on every row.
sellAmountamountSee Line items and amounts
buyRateMonthly buy rate, like sellRate
buyAmountBuy amount
daysInEffectdays_in_effectDays from date to the end of the service period, inclusive
daysInPerioddays_in_periodDays in the service period

Line types​

typeName on the PDFCounts
user_seatsUCaaS User LicenseUsers
didsLocal DIDPhone numbers
voiceai_locationsManaged VoiceAI LocationLocations 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 fieldCSV (## one-time charges)Description
descriptiondescriptionThe name to show on a bill, such as Service Set-up Fee
billingTypebilling_typearrears
servicePeriodservice_start, service_endThe month the charge is for: the prior month
quantityquantity
unitPriceunit_price
amountamountquantity × unitPrice

Tax and fee entry​

JSON fieldCSV (## taxes and fees)Description
descriptiondescriptionThe name to show on a bill
categorygrouprecovery_fee or tax; the CSV has the group label
amountamount
lineTypeRecovery fees: the feeLineItems line item this totals, with billingType
billingTypebilling_typeRecovery fees: advance or catchup
service_start, service_endRecovery fees: the line item's service period
unitunitRecovery fees on a location: user_seat or did
taxAuthoritytax_authorityGovernment-imposed: the authority that imposes it
taxLeveltax_levelGovernment-imposed: the jurisdiction level, such as FEDERAL, STATE/PROVINCE, COUNTY, or CITY/TOWN/VILLAGE. Levels can change with the regulatory environment.
taxLevelCodeGovernment-imposed: the level as a number, 1 (federal) to 5 (district)
taxTypeGovernment-imposed: a code for the kind of charge
taxTypeDescGovernment-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
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
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 fieldCSVDescription
platformId … generatedAt## summaryAs in the account billing files, except that the CSV labels the platform name Bill To
totalAccounts## summary Total accountsAccounts billed
serviceCharges.advance, .catchup## service charges: advance, : catch-upOne bucket each for userSeats, dids, voiceaiLocations. catchup is omitted when there is none.
otherFeesAndSurcharges## other fees and surchargesRecovery fees, one entry per fee and billingType
subtotalServices## totals (USD) subtotal_servicesSum of the bucket subtotals
totalOneTimeChargestotal_one_time_chargesFrom the account billing files
totalTaxesFeesAndSurchargesPassthroughtotal_taxes_fees_surcharges_passthroughFrom the account billing files
totalRecoveryFeesPassthroughtotal_recovery_fees_passthroughFrom the account billing files
totalGovernmentTaxesPassthroughtotal_government_taxes_passthroughFrom the account billing files
totalDuetotal_duesubtotalServices + 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 locations breakdown. In the account CSV, location_id and location_name are the last two columns, with one row per location.
  • Recovery fees have their own line items, in feeLineItems and ## fee activity. Fee entries drop unitPrice and units and gain lineType and billingType, with one entry per billingType.
  • Baselines and changes carry daysInEffect and daysInPeriod, and changes carry countChange, with matching CSV columns.
  • ## accounts gains catch_up_services.
  • The account CSV gains a ## one-time charges section.
  • The Service Set-up Fee's servicePeriod is the prior month, the month the account started, rather than the billing month. Its billingType is still arrears.
  • 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.