Skip to content

Tax categories on bills, expenses and invoices

Read the categories, ask for a suggestion, and read each record’s category. A suggestion is a draft: a person confirms it, in the console or the app.

Tax categories

The rules, in order

01

The categories

GET /v1/tax-categories (reports:read) lists the edition us-sch-c-2026: the lines of IRS Schedule C. Each has a code, a direction (expense for bills and expenses, income for issued invoices), a label and what belongs in it. A record stores the code beside its free-text category and the edition it belongs to.

Tax categories
CodeDirectionForm line
advertisingexpenseLine 8
car_truckexpenseLine 9
commissions_feesexpenseLine 10
contract_laborexpenseLine 11
depletionexpenseLine 12
depreciationexpenseLine 13
employee_benefitsexpenseLine 14
insuranceexpenseLine 15
interest_mortgageexpenseLine 16a
interest_otherexpenseLine 16b
legal_professionalexpenseLine 17
office_expenseexpenseLine 18
pension_profit_sharingexpenseLine 19
rent_vehicles_equipmentexpenseLine 20a
rent_propertyexpenseLine 20b
repairs_maintenanceexpenseLine 21
suppliesexpenseLine 22
taxes_licensesexpenseLine 23
travelexpenseLine 24a
mealsexpenseLine 24b
utilitiesexpenseLine 25
wagesexpenseLine 26
home_officeexpenseLine 30
other_expenseexpenseLine 27a
cost_of_goodsexpensePart III
capital_assetexpense—
personal_not_deductibleexpense—
income_goodsincomeLine 1
income_servicesincomeLine 1
income_otherincomeLine 6
income_interestincomeLine 6
not_incomeincome—

02

Asking for a suggestion

POST /v1/tax-categories/{bills|expenses|invoices}/suggest takes up to 25 recordIds and needs that kind’s write scope (bills:write, expenses:write or invoices:write). The answer is one result per record. The free answers come first and cost nothing: a default set on a vendor or customer, the person’s own earlier choices for the same payee, and for an invoice the rate basis of its lines. The model is asked only when none of those decides, and that uses AI credits; when the workspace has none, only those records are skipped.

A suggestion is a draft stored beside the record. It sets nothing, and its reason is returned inside the untrusted-data envelope.

03

Confirming

There is no REST route that sets a category: a person confirms in the console or the app. An assistant calls confirm_tax_category (POST /v1/actions/confirmTaxCategory, target: the suggestion), which is an action request. A person approves it, or it runs at once only under a rule the owner set for that kind.

04

Reading a record’s category

A bill, expense or invoice answer carries taxCategory, taxCategoryVersion and taxCategorySource (person or suggestion), and, while one waits, the read-only taxSuggestion.

05

The report

GET /v1/reports/tax-categories?from=&to= (reports:read) totals each category per currency over a period: bills (not draft, not void) and expenses by expense category, and issued invoices as gross receipts without the sales tax collected, with the uncategorised counted separately. The basis is what was invoiced.

A suggestion, not tax advice. Check your categories with your accountant.

Next guide

Work records

Read the record type first, send each answer in the form its question takes, check before you move a record, and upload a document in three calls. Activating, issuing and delivering stay with a person.

Continue to Work records →

Try it in your sandbox

A bmk_test_ key reaches only your sandbox workspace.

We use Google Analytics on our website by default to understand visits. Choose Decline to turn it off; you can change this at any time on the Cookies page. We never send Google your name, email or account. Cookie policy