Integration

Zoho Expense integration

Zoho Expense is a travel and expense management platform. Record expenses (create, update, split, merge, bulk add, comments, duplicate checks), build expense reports and move them through approval (submit, approve, reject, reimburse, archive, forward), and manage trips, employee advances, users, expense categories, customers, projects, currencies and taxes. Every call needs the organization id in the X-com-zoho-expense-organizationid header, from list_organizations. Organization creation and update, reporting tags, receipt and attachment file uploads or downloads, receipt scanning and report export are not exposed. Authentication is Zoho OAuth 2.0 with ZohoExpense scopes; the base URL is the US data center (www.zohoapis.com). Rate limit: 100 requests per minute per organization, plus a daily cap that depends on the plan (1000 requests on Free).

Ask it in chat

Say what should happen.
The workflow builds itself.

When this happens, do that in Zoho Expense.Built from the 118 Zoho Expense tools below, on the connection you add once.

What you can do with Zoho Expense

Each of these is one operation on one endpoint, available both as a workflow step and as a tool an AI agent can call on its own. Nothing bundles several operations into one action, so what a run did stays readable afterwards.

Most endpoints run on the free plan. A few, mainly the ones that publish on your behalf, need a paid plan.

Comment, 7 operations

  • add_advance_payment_commentAdd advance payment commentPOSTAdd a comment (comments, the text) to an advance payment.
  • add_expense_commentAdd expense commentPOSTAdd a comment (comments, the text) to an expense.
  • add_expense_report_commentAdd expense report commentPOSTAdd a comment to a report, optionally tied to one of its expenses (expense_id).
  • delete_advance_payment_commentDelete advance payment commentDELETEDelete a comment on an advance payment.
  • delete_expense_commentDelete expense commentDELETEDelete a comment on an expense. Users can only delete comments they wrote.
  • delete_expense_report_commentDelete expense report commentDELETEDelete a comment from a report.
  • list_expense_commentsList expense commentsGETList the comments on an expense.

Expense, 6 operations

  • bulk_delete_expensesBulk delete expensesDELETEPermanently delete several expenses (expense_ids, comma-separated). Submitted, Approved and Reimbursed expenses cannot be deleted. Set receipt=true to delete only their attached receipts instead.
  • create_expenseCreate expensePOSTCreate an expense. currency_id and line_items (each with category_id and amount) are required; date, merchant_id, payment_mode, report_id, customer_id, project_id, billable and reimbursable flags, attendees and custom fields are optional.
  • delete_expenseDelete expenseDELETEPermanently delete one expense. Submitted, Approved and Reimbursed expenses cannot be deleted. Set receipt=true to delete only its attached receipt instead.
  • get_expenseGet expenseGETGet one expense with its line items, amounts, category, merchant, report, attached documents and custom fields.
  • list_expensesList expensesGETList expenses, filtered by report status, date range (date_start, date_end), category_id, merchant_id, customer_id or project_id. Paged with page and per_page (default 200).
  • update_expenseUpdate expensePUTUpdate an expense; send the fields to change. line_items is required by the vendor: read the expense with get_expense first and send its line items back (with line_item_id), changed as needed.

Expensereport, 6 operations

  • bulk_delete_expense_reportsBulk delete expense reportsDELETEPermanently delete several reports (report_ids, comma-separated), usually draft or rejected ones. Their expenses become unreported and stay in the expense list.
  • create_expense_reportCreate expense reportPOSTCreate an expense report: report_name, start_date and end_date are required. Optionally attach existing expenses (expenses: [{expense_id, order}]), a customer, a project, custom fields and tags.
  • delete_expense_reportDelete expense reportDELETEPermanently delete a report, usually draft or rejected (submitted, approved and reimbursed reports cannot be deleted). Its expenses become unreported and stay in the expense list.
  • get_expense_reportGet expense reportGETGet one expense report: its expenses with amounts and categories, the approval chain, recorded reimbursements, applied advances and totals.
  • list_expense_reportsList expense reportsGETList expense reports, filtered by status, view type (type), dates, amounts, submitter, approver, customer, project and more. Paged with page and per_page (default 200).
  • update_expense_reportUpdate expense reportPUTUpdate a report's name, description, dates, customer, project, custom fields or tags; send the fields to change. A report is usually editable only in draft or recalled status (see recall_expense_report).

Advancepayment, 5 operations

  • create_advance_paymentCreate advance paymentPOSTRecord a cash advance for an employee: user_id, amount, currency_id and date are required; optional trip, customer, project, reference number and notes. Submit it for approval with submit_advance_payment.
  • delete_advance_paymentDelete advance paymentDELETEDelete an advance payment.
  • get_advance_paymentGet advance paymentGETGet one advance payment: employee, amount, currency, status, trip and notes.
  • list_advance_paymentsList advance paymentsGETList advance payments, filtered by status, employee (user_id), trip, report, customer, project or search_text. Paged with page and per_page (default 200).
  • update_advance_paymentUpdate advance paymentPUTUpdate a draft advance payment. The vendor requires user_id, amount, currency_id and date on every update: read them with get_advance_payment and send them back with your change.

Contact, 5 operations

  • create_customerCreate customerPOSTCreate a customer: contact_name is required; optional company name, email, phone, website, billing and shipping addresses, contact persons and custom fields.
  • delete_customerDelete customerDELETEDelete a customer.
  • get_customerGet customerGETGet one customer with its contact details, addresses and contact persons.
  • list_customersList customersGETList the organization's customers (customer_id values used on expenses, reports and projects). Paged with page and per_page.
  • update_customerUpdate customerPUTUpdate a customer; send the fields to change.

Currency, 5 operations

  • create_currencyCreate currencyPOSTAdd a currency: currency_code and currency_format are required; optional name, symbol and price precision.
  • delete_currencyDelete currencyDELETEDelete a currency.
  • get_currencyGet currencyGETGet one currency: code, name, symbol, precision and format.
  • list_currenciesList currenciesGETList the organization's currencies (currency_id values used on expenses, advances and reimbursements).
  • update_currencyUpdate currencyPUTUpdate a currency's symbol, precision or format (currency_format is required).

Expensecategory, 5 operations

  • create_expense_categoryCreate expense categoryPOSTCreate an expense category: category_name is required; optional GL code, description, maximum allowed amount and the amount above which a receipt is required.
  • delete_expense_categoryDelete expense categoryDELETEDelete an expense category.
  • get_expense_categoryGet expense categoryGETGet one expense category: name, GL code, description and amount limits.
  • list_expense_categoriesList expense categoriesGETList the organization's active expense categories (category_id values used on expenses). Paged with page and per_page.
  • update_expense_categoryUpdate expense categoryPUTUpdate an expense category; send the fields to change.

Project, 5 operations

  • create_projectCreate projectPOSTCreate a project: project_name and customer_id (from list_customers) are required; optional description, billing type, project head and users.
  • delete_projectDelete projectDELETEDelete a project.
  • get_projectGet projectGETGet one project: name, customer, billing type, head and users.
  • list_projectsList projectsGETList the organization's projects (project_id values used on expenses and reports). Paged with page and per_page.
  • update_projectUpdate projectPUTUpdate a project; send the fields to change.

Reject, 5 operations

  • bulk_reject_expense_reportsBulk reject expense reportsPOSTReject several submitted reports (report_ids, comma-separated) with one optional reason in comments; they go back to their submitters.
  • reject_advance_paymentReject advance paymentPOSTReject a submitted advance payment, with an optional reason in comments.
  • reject_expense_in_reportReject expense in reportPOSTReject a single expense inside a report, with an optional reason in comments.
  • reject_expense_reportReject expense reportPOSTReject a submitted report, with an optional reason in comments; it goes back to the submitter for revision. The caller must be an authorized approver.
  • reject_tripReject tripPOSTReject a submitted trip request.

Tax, 5 operations

  • create_taxCreate taxPOSTCreate a tax: tax_name, tax_percentage and tax_authority_name are required.
  • delete_taxDelete taxDELETEDelete a tax.
  • get_taxGet taxGETGet one tax: name, percentage, type and authority.
  • list_taxesList taxesGETList the organization's taxes (tax_id values used on expense line items).
  • update_taxUpdate taxPUTUpdate a tax; send the fields to change.

Trip, 5 operations

  • create_tripCreate tripPOSTCreate a trip request: trip_name and travel_type (domestic or international) are required, and destination_country_code is required for international trips. Optional purpose, budget, co-travellers, customer and project.
  • delete_tripDelete tripDELETEDelete a trip request. Approved, closed and cancelled trips cannot be deleted.
  • get_tripGet tripGETGet one trip with its itineraries, budget, travellers and status.
  • list_tripsList tripsGETList trips. Paged with page and per_page (default 200).
  • update_tripUpdate tripPUTUpdate a trip; fields left out keep their values, but itineraries is required and replaces the list (an itinerary left out is deleted). Read get_trip first and resend every itinerary to keep, with itinerary_id.

User, 5 operations

  • create_userCreate userPOSTAdd a user to the organization: name, email and user_role are required; optional approver emails, submission and approval amount limits, department, designation and policy.
  • delete_userDelete userDELETEDelete a user from the organization.
  • get_userGet userGETGet one user: name, email, role, approver, amount limits, department and status.
  • list_usersList usersGETList the organization's users (user_id values used as employees, approvers and travellers). Paged with page and per_page.
  • update_userUpdate userPUTUpdate a user; send the fields to change.

Approve, 4 operations

  • approve_advance_paymentApprove advance paymentPOSTApprove a submitted advance payment.
  • approve_expense_reportApprove expense reportPOSTApprove a submitted report. The caller must be an authorized approver in its approval flow; the submitter is notified.
  • approve_tripApprove tripPOSTApprove a submitted trip request.
  • bulk_approve_expense_reportsBulk approve expense reportsPOSTApprove several submitted reports (report_ids, comma-separated). The caller must be an authorized approver of each; submitters are notified.

Document, 3 operations

  • delete_advance_payment_documentDelete advance payment documentDELETERemove a file attached to an advance payment. Set un_associate=true to only detach it and keep it in the organization.
  • delete_expense_documentDelete expense documentDELETERemove an attached document from an expense; document ids come from get_expense.
  • delete_expense_report_documentDelete expense report documentDELETEDelete an attachment from a report. Set unassociate=true to only detach it from the report without deleting the file.

Submit, 3 operations

  • bulk_submit_expense_reportsBulk submit expense reportsPOSTSubmit several draft or recalled reports (report_ids, comma-separated) for approval to approver_id. Each needs at least one expense and its mandatory fields filled.
  • submit_advance_paymentSubmit advance paymentPOSTSubmit a draft advance payment for approval, optionally to approver_id (a user id from list_users).
  • submit_expense_reportSubmit expense reportPOSTSubmit a draft or recalled report for approval to approver_id (a user id from list_users), optionally copying cc_mail_ids. It needs at least one expense; validate_expense_report shows blocking issues first.

Active, 2 operations

  • activate_projectActivate projectPOSTMark a project as active.
  • activate_userActivate userPOSTMark an inactive user as active.

Archive, 2 operations

  • archive_expense_reportArchive expense reportPOSTArchive a report: it leaves the default report list but is kept and searchable. Undo with unarchive_expense_report.
  • bulk_archive_expense_reportsBulk archive expense reportsPOSTArchive several reports (report_ids, comma-separated): they leave the default report list but are kept and searchable.

Bulkfieldupdate, 2 operations

  • bulk_field_update_expense_reportsBulk field update expense reportsPOSTApply the same field changes to several reports (report_ids, comma-separated): fields is an object of the report fields to set, for example customer_id or project_id.
  • bulk_field_update_expensesBulk field update expensesPOSTSet the same field values on several expenses (expense_ids, comma-separated), for example date, merchant_id, project_id or payment_mode. Send only the fields to change: each one is applied to every listed expense.

Cancel, 2 operations

  • cancel_expense_report_reimbursementCancel expense report reimbursementPOSTCancel a reimbursement previously recorded on a report.
  • cancel_tripCancel tripPOSTCancel a trip.

Forwardapproval, 2 operations

  • bulk_forward_expense_report_approvalBulk forward expense report approvalPOSTForward the approval of several reports (report_ids, comma-separated) to another approver (approver_id), with optional comments.
  • forward_expense_report_approvalForward expense report approvalPOSTForward the approval of a report to another approver (approver_id, a user id from list_users), with optional comments.

Inactive, 2 operations

  • deactivate_projectDeactivate projectPOSTMark a project as inactive.
  • deactivate_userDeactivate userPOSTMark a user as inactive.

Organization, 2 operations

  • get_organizationGet organizationGETGet one organization's details: name, contact, base currency, time zone, language and fiscal year start.
  • list_organizationsList organizationsGETList the Zoho Expense organizations the user belongs to. Each organization_id is the value to pass as X-com-zoho-expense-organizationid on every other call.

Tag, 2 operations

  • associate_expense_report_tagsAssociate expense report tagsPOSTSet reporting tags on a report: tags is an array of {tag_id, tag_option_id}.
  • associate_expense_tagsAssociate expense tagsPOSTSet reporting tags on an expense: tags is an array of {tag_id, tag_option_id}. The tags must already exist in the organization.

Unarchive, 2 operations

  • bulk_unarchive_expense_reportsBulk unarchive expense reportsPOSTRestore several archived reports (report_ids, comma-separated) to the default report list.
  • unarchive_expense_reportUnarchive expense reportPOSTRestore an archived report to the default report list.

Addexpense, 1 operation

  • add_expenses_to_expense_reportAdd expenses to expense reportPOSTAttach existing expenses to a report: expense_ids is a comma-separated list of expense ids from list_expenses.

Addtoreport, 1 operation

  • add_expense_to_reportAdd expense to reportPOSTAdd one existing expense to a report (report_id). To add several at once use add_expenses_to_expense_report.

Approvalhistory, 1 operation

  • get_expense_report_approval_historyGet expense report approval historyGETGet a report's approval trail: each status change with the approver's name and email, comments and date.

Budgetsummary, 1 operation

  • get_expense_report_budget_summaryGet expense report budget summaryGETGet the budget versus actual summary of a report.

Bulkadd, 1 operation

  • bulk_add_expensesBulk add expensesPOSTCreate several expenses in one call: expenses is an array of objects, each with category_id and amount required, plus optional date, currency_id, merchant_id, report_id, customer_id, project_id and flags.

Close, 1 operation

  • close_tripClose tripPOSTClose an approved trip.

Duplicate, 1 operation

  • list_expense_duplicatesList expense duplicatesGETList the expenses flagged as possible duplicates of an expense.

Expensebulkreject, 1 operation

  • bulk_reject_expenses_in_reportBulk reject expenses in reportPOSTReject several expenses inside one report (expense_ids, comma-separated), with an optional reason in comments.

Hide, 1 operation

  • disable_expense_categoryDisable expense categoryPOSTDisable (hide) an expense category.

Merge, 1 operation

  • merge_expensesMerge expensesPOSTMerge the expense duplicate_expense_id into the expense expense_id. Submitted, Approved and Reimbursed expenses cannot be merged.

Primary, 1 operation

  • set_expense_primary_documentSet expense primary documentPOSTMake one of an expense's attached documents its primary document; document ids come from get_expense.

Recall, 1 operation

  • recall_advance_paymentRecall advance paymentPOSTRecall a submitted advance payment.

Reimburse, 1 operation

  • reimburse_expense_reportReimburse expense reportPOSTRecord a reimbursement on an approved report (needs reimbursement permission). amount defaults to the report's reimbursable amount. This tool records offline reimbursements; it cannot authorize an online gateway payment.

Reimbursement, 1 operation

  • get_expense_report_reimbursementGet expense report reimbursementGETGet the reimbursement details recorded on a report.

Removeadvancepayment, 1 operation

  • remove_advance_payments_from_expense_reportRemove advance payments from expense reportPOSTDetach advance payments from a report (advance_payment_ids, comma-separated).

Removeexpense, 1 operation

  • remove_expenses_from_expense_reportRemove expenses from expense reportPOSTDetach expenses from a report (expense_ids, comma-separated).

Reset, 1 operation

  • bulk_reset_expense_report_substatusBulk reset expense report substatusPOSTReset the sub-status of several reports (report_ids, comma-separated).

Role, 1 operation

  • assign_role_to_userAssign role to userPOSTAssign a role (role_id, the id of a role defined in the organization) to a user.

Share, 1 operation

  • share_expense_reportShare expense reportPOSTShare a report with other users of the organization: user_ids is a comma-separated list of user ids from list_users.

Show, 1 operation

  • enable_expense_categoryEnable expense categoryPOSTEnable (show) a disabled expense category.

Skipduplicate, 1 operation

  • skip_duplicate_expenseSkip duplicate expensePOSTMark an expense as not a duplicate, so duplicate detection stops flagging it.

Split, 1 operation

  • split_expenseSplit expensePOSTSplit one expense into several: expenses is an array of parts, each with category_id and amount, whose amounts must add up to the original amount. A part may carry its own project, customer or tags.

Takeback, 1 operation

  • recall_expense_reportRecall expense reportPOSTTake back (recall) a submitted report so it can be edited and submitted again.

Taxgroup, 1 operation

  • get_tax_groupGet tax groupGETGet one tax group and the taxes it combines.

Validate, 1 operation

  • validate_expense_reportValidate expense reportGETCheck a report before submission: returns is_valid and the policy violations, missing receipts or other issues that would block submit_expense_report.

Void, 1 operation

  • return_advance_paymentReturn advance paymentPOSTMark an advance payment as fully returned: date (yyyy-MM-dd) is required; optional refund notes, reference number and the account the refund is recorded against.

Use Zoho Expense from Claude Code, Cursor or Codex

Connect Zoho Expense in LiveContext, create an API key in Settings, then add the LiveContext MCP server to your client. Its Zoho Expense operations become tools the client can call, next to every other integration you connected.

Claude Code
claude mcp add --transport http livecontext https://livecontext.ai/mcp --header "X-API-Key: YOUR_API_KEY"
Codex (~/.codex/config.toml)
[mcp_servers.livecontext]
url = "https://livecontext.ai/mcp"

[mcp_servers.livecontext.http_headers]
"X-API-Key" = "YOUR_API_KEY"
Cursor, Claude Desktop and other JSON configs
{
  "mcpServers": {
    "livecontext": {
      "type": "http",
      "url": "https://livecontext.ai/mcp",
      "headers": {
        "X-API-Key": "YOUR_API_KEY"
      }
    }
  }
}

Set up the MCP server step by step

How to connect Zoho Expense

  1. Create your workspace

    Sign up free. Nothing to install.

  2. Connect Zoho Expense once

    Add your Zoho Expense connection in Settings. Every tool from this integration reuses it, and secrets are encrypted at rest and visible only to you.

  3. Describe the job in chat

    The workflow builds itself in front of you and picks the endpoints it needs. Drag the steps yourself on the canvas whenever you would rather be explicit.

Zoho Expense integration FAQ

What can you do with the Zoho Expense integration?

LiveContext exposes 118 operations on Zoho Expense, covering comment, expense, expensereport and advancepayment.

Popular integrations

Browse the whole catalog