Expenses, Petty Cash & Billable Costs
Track day-to-day business operational overheads, manage office petty cash floats, categorize travel and utility costs, recharge billable expenses to clients, and automatically post General Ledger journals in Katixo.
1. Module Overview: Expenses vs. Purchase Bills
While Purchase Bills manage commercial vendor liabilities and Input Tax Credit (ITC), the Expenses module is built for quick operational payments made directly from cash counters or bank accounts:
Direct Ledger Deductions
Debits the chosen operational expense account (e.g. Fuel, Rent, Tea) and immediately credits the Cash or Bank account.
Billable Client Costs
Tag expenses to specific customers or client projects to include them in the next customer billing cycle.
Receipt Attachments
Attach physical vouchers, fuel slips, and invoice scans for audit-ready compliance.
2. How to Record an Expense (Step-by-Step UI Guide)
- 1Go to Accounting > Expenses > Click "Add Expense":Choose the Expense Category (e.g. Vehicle Fuel, Office Refreshments, Warehouse Repairs).
- 2Select "Paid Through" Account:Specify where the funds came from: Petty Cash Float, HDFC Current Account, or Corporate Credit Card.
- 3Enter Amount & GST Details (if applicable):If the voucher includes tax, input GST components to claim input credit.
- 4Save Expense:Katixo immediately writes the General Ledger journal: DEBIT Expense Account (6xxx) / CREDIT Cash or Bank (1xxx).
Developer & REST API Reference
Programmatically query, create, update, and categorize expenses via REST:
/api/v1/expenses/api/v1/expenses/{id}/api/v1/expenses/api/v1/expenses/{id}/api/v1/expenses/{id}List expenses
/api/v1/expensesQuery parameters
| Parameter | Type | Description |
|---|---|---|
from | date | Expense date from (YYYY-MM-DD). |
to | date | Expense date to. |
category | string | Filter by expense category. |
contactId | UUID | Filter by vendor contact. |
page, size, sort | int / string | Pagination (0-indexed, default size: 20). |
Roles: OWNER, ADMIN, ACCOUNTANT, OPERATOR, VIEWER.
Create an expense
/api/v1/expensesRecords a new expense and creates the corresponding journal entry. Returns 201 Created.
curl -X POST https://api.katixo.com/api/v1/expenses \
-H "Authorization: Bearer eyJhbGciOiJIUzI1NiIs..." \
-H "Content-Type: application/json" \
-d '{
"expenseDate": "2026-06-10",
"accountId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"category": "Office Supplies",
"description": "Printer cartridges and A4 paper",
"amount": 2500.00,
"gstRate": 18.00,
"paymentMode": "UPI",
"paidThroughId": "b2c3d4e5-f6a7-8901-bcde-f12345678901",
"billable": false
}'Request body
| Field | Type | Required | Description |
|---|---|---|---|
expenseDate | date | Yes | Date of the expense. |
accountId | UUID | Yes | Expense account to debit. |
amount | decimal | Yes | Expense amount (must be > 0.01). |
paymentMode | string | Yes | How the expense was paid (e.g., UPI, Cash, Bank Transfer). |
paidThroughId | UUID | Yes | Account the payment was made from (e.g., cash, bank account). |
gstRate | decimal | No | GST rate (0, 5, 12, 18, or 28). Defaults to 0. |
category | string | No | Expense category for reporting. |
contactId | UUID | No | Vendor contact. Optional for cash expenses. |
billable | boolean | No | Whether this expense can be billed to a customer. |
customerContactId | UUID | No | Customer to bill this expense to (when billable). |
receiptUrl | string | No | URL to the uploaded receipt image. |
Void an expense
/api/v1/expenses/{id}The DELETE endpoint voids the expense rather than deleting it — it creates a reversal journal entry and marks the expense as VOIDED. The record remains for audit purposes. Optionally pass a reason in the request body. Requires OWNER, ADMIN, or ACCOUNTANT role.
The Expense object
{
"id": "d4e5f6a7-b8c9-0123-4567-89abcdef0123",
"expenseNumber": "EXP-2026-0034",
"expenseDate": "2026-06-10",
"accountId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"accountCode": "5001",
"accountName": "Office Supplies",
"category": "Office Supplies",
"description": "Printer cartridges and A4 paper",
"amount": 2500.00,
"taxAmount": 450.00,
"total": 2950.00,
"currency": "INR",
"gstRate": 18.00,
"contactId": null,
"contactName": null,
"paymentMode": "UPI",
"paidThroughId": "b2c3d4e5-f6a7-8901-bcde-f12345678901",
"paidThroughName": "HDFC Current Account",
"billable": false,
"projectId": null,
"customerContactId": null,
"customerContactName": null,
"receiptUrl": null,
"status": "ACTIVE",
"journalEntryId": "e5f6a7b8-c9d0-1234-5678-9abcdef01234",
"createdAt": "2026-06-10T11:30:00Z"
}