Katixo/API DocumentationBeta

Expenses

Record business expenses with automatic journal entry creation. Expenses can be linked to vendors, projects, and customers (for billable expenses). Each expense posts to the specified expense account and deducts from the paid-through account.

Endpoints

GET/api/v1/expenses
GET/api/v1/expenses/{id}
POST/api/v1/expenses
PUT/api/v1/expenses/{id}
DELETE/api/v1/expenses/{id}

List expenses

GET/api/v1/expenses

Query parameters

ParameterTypeDescription
fromdateExpense date from (YYYY-MM-DD).
todateExpense date to.
categorystringFilter by expense category.
contactIdUUIDFilter by vendor contact.
page, size, sortint / stringPagination (0-indexed, default size: 20).

Roles: OWNER, ADMIN, ACCOUNTANT, OPERATOR, VIEWER.

Create an expense

POST/api/v1/expenses

Records 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

FieldTypeRequiredDescription
expenseDatedateYesDate of the expense.
accountIdUUIDYesExpense account to debit.
amountdecimalYesExpense amount (must be > 0.01).
paymentModestringYesHow the expense was paid (e.g., UPI, Cash, Bank Transfer).
paidThroughIdUUIDYesAccount the payment was made from (e.g., cash, bank account).
gstRatedecimalNoGST rate (0, 5, 12, 18, or 28). Defaults to 0.
categorystringNoExpense category for reporting.
contactIdUUIDNoVendor contact. Optional for cash expenses.
billablebooleanNoWhether this expense can be billed to a customer.
customerContactIdUUIDNoCustomer to bill this expense to (when billable).
receiptUrlstringNoURL to the uploaded receipt image.

Void an expense

DELETE/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"
}