Expense Details API
Expense APIs
Expense Details API
Retrieve detailed information for a single expense including line items, taxes, merchant, and transaction data
Expense Details API
Authentication
All requests require an API key in the request headers. Headers:Request
Path Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
expenseId | string | Yes | The unique slug identifier of the expense |
Code Examples
Success Response
HTTP Status:200 OK
Response Fields:
| Field | Type | Description |
|---|---|---|
ok | boolean | Indicates whether the request was successful |
data | object | Contains the expense details |
data.id | string | Unique identifier (slug) for the expense |
data.expenseType | string | Type of the expense |
data.description | string | Description of the expense |
data.itemCount | number | Number of line items in the expense |
data.expenseDate | string | Date the expense was incurred (ISO 8601 format) |
data.dueDate | string | Due date for the expense (ISO 8601 format) |
data.accountingDate | string | Accounting date for the expense (ISO 8601 format) |
data.approvedDate | string | Date the expense was approved (ISO 8601 format) |
data.recipientId | string | Identifier of the payment recipient |
data.recipientType | string | Type of the payment recipient |
data.paymentDate | string | Date the expense was paid (ISO 8601 format) |
data.amount | number or string | Total amount of the expense |
data.currency | string | Currency code (e.g., INR) |
data.state | string | Current state of the expense. Possible values: DRAFTED, PENDING, APPROVED, OUT_OF_POLICY |
data.paymentState | string | Payment state of the expense |
data.amountPaid | number or string | Amount that has been paid against the expense |
data.dateCreated | string | Date the expense was created in the system (ISO 8601 format) |
data.remarks | string | Notes / remarks on the expense |
data.source | string | Source of the expense. Manual entries are returned as WEB; other possible values include EMAIL, SLACK |
data.syncedReferenceId | string | Reference identifier of the expense in the connected accounting platform |
data.documentId | string | Identifier of the source document, if any |
data.syncState | string | Synchronization state with the accounting system (e.g., SYNCED, NOT_SYNCED) |
data.syncMode | string | Synchronization mode for the expense |
data.accountingPlatform | string | Name of the connected accounting platform. Present only when an accounting integration is connected |
data.selfUrl | string | Shareable URL for viewing the expense in the web interface |
data.identifier | string | Human-readable identifier / number for the expense |
data.cardInfo | object | Card details if paid by card. Empty object if not applicable |
data.cardInfo.name | string | Card name |
data.cardInfo.slug | string | Card slug identifier |
data.cardInfo.maskedCardNumber | string | Masked card number |
data.cardInfo.description | string | Card description |
data.cardInfo.dateCreated | string | Date the card was created |
data.cardInfo.provider | string | Card provider |
data.transaction | object | Transaction details |
data.transaction.utr | string | Unique Transaction Reference (UTR) of the payment |
data.transaction.dateConfirmed | string | Date the transaction was confirmed |
data.transaction.narration | string | Bank narration for the transaction |
data.transaction.ledgerId | string or null | Ledger / instrument identifier the transaction is mapped to |
data.initiator | object | Details of the user who raised the expense |
data.initiator.slug | string | Unique slug identifier of the initiator |
data.initiator.name | string | Full name of the initiator |
data.initiator.email | string | Email address of the initiator |
data.merchant | object | Merchant details |
data.merchant.name | string or null | Merchant name |
data.merchant.vpa | string or null | Merchant VPA (UPI address) |
data.merchant.mcc | object | Merchant Category Code details. Present only when MCC data is available |
data.merchant.mcc.code | string or null | MCC code |
data.merchant.mcc.groupSlug | string or null | MCC group slug |
data.merchant.mcc.groupName | string or null | MCC group name |
data.merchant.mcc.groupDescription | string or null | MCC group description |
data.merchant.mcc.groupExtra | object or null | Additional MCC group metadata |
data.vendor | object | Linked vendor details. Empty object if no vendor is linked |
data.vendor.slug | string | Unique slug identifier of the vendor |
data.vendor.name | string | Vendor display name (falls back to legal name) |
data.vendor.email | string | Vendor email address |
data.lineItems | array | Line items on the expense |
data.lineItems[].id | string | Unique identifier of the line item |
data.lineItems[].description | string | Line item description |
data.lineItems[].amount | number | Total amount for the line item |
data.lineItems[].rate | number or null | Unit rate for the line item |
data.lineItems[].quantity | number or null | Quantity for the line item |
data.lineItems[].ledgerType | string or null | Ledger type mapped to the line item |
data.lineItems[].ledgerId | string or null | Ledger identifier mapped to the line item |
data.lineItems[].skuId | string or null | SKU identifier mapped to the line item |
data.lineItems[].trxTax | object | Transaction (e.g., GST) tax details for the line item |
data.lineItems[].trxTax.type | string | Tax type |
data.lineItems[].trxTax.amount | number | Tax amount |
data.lineItems[].trxTax.name | string | Tax name |
data.lineItems[].trxTax.deductionType | string or null | Tax deduction type |
data.lineItems[].trxTax.deductionValue | number or null | Tax deduction value |
data.lineItems[].trxTax.id | number or string or null | Tax identifier |
data.lineItems[].whtTax | object | Withholding (e.g., TDS) tax details for the line item |
data.lineItems[].whtTax.type | string | Withholding tax type |
data.lineItems[].whtTax.amount | number | Withholding tax amount |
data.lineItems[].whtTax.name | string | Withholding tax name |
data.lineItems[].whtTax.deductionType | string or null | Withholding deduction type |
data.lineItems[].whtTax.deductionValue | number or null | Withholding deduction value |
data.lineItems[].whtTax.id | number or string or null | Withholding tax identifier |
data.lineItems[].amountBreakdown | object | Computed amount breakdown for the line item |
data.lineItems[].amountBreakdown.subTotal | number | Amount before transaction tax |
data.lineItems[].amountBreakdown.grossTotal | number | Sub-total plus transaction tax |
data.lineItems[].amountBreakdown.netPayable | number | Gross total minus withholding tax |
data.processingStatus | object | Document-processing status. Present only when the expense was created from a document being processed |
data.processingStatus.processingId | string | Identifier of the processing job |
data.processingStatus.status | string | Current processing state |
data.processingStatus.isReady | boolean | Whether processing has completed and the data is ready |
Response Example
Error Responses
Missing Expense ID
HTTP Status:400 Bad Request
Expense Not Found
HTTP Status:404 Not Found
Access Denied
HTTP Status:403 Forbidden
Authentication Errors
HTTP Status:401 Unauthorized
Permission Errors
HTTP Status:403 Forbidden
Internal Error
HTTP Status:500 Internal Server Error
Best Practices
- Use the
idreturned by the Expense List API as theexpenseIdpath parameter amountBreakdownis computed per line item:subTotalexcludes transaction tax,grossTotaladds it back, andnetPayablesubtracts withholding taxmerchant.mccandprocessingStatusare only present when the underlying data exists — guard for their absence- Access is limited to users with expense read permission and an admin or bookkeeper role