Skip to main content

Zoho Expense

Zoho Expense is an all-in-one travel and expense management platform that automates the expense lifecycle — receipt capture and auto-categorization, multi-level approvals, corporate card reconciliation, and reimbursement. It gives real-time visibility into employee spend, enforces policy compliance, and integrates with ERP, payroll, and accounting systems to streamline expense reporting.

Zoho Expense icon

Power end-to-end data operations for your Zoho Expense API with Nexla. Our bi-directional Zoho Expense connector is purpose-built for Zoho Expense, making it simple to ingest data, sync it across systems, and deliver it anywhere — all with no coding required. Nexla turns API-sourced data into ready-to-use, reusable data products and makes it easy to send data to Zoho Expense or any other destination. With comprehensive monitoring, lineage tracking, and access controls, Nexla keeps your Zoho Expense workflows fast, secure, and fully governed.

Features

Type: API

SourceDestination

  • Seamless API Integration: Connect to any endpoint as source or destination without coding, with automatic data product creation
  • Visual Composition & Chaining: Build complex integrations using visual templates, chain API calls, and compose workflows with data validation and filtering
  • API Proxy: Expose curated slices of your data securely with a secure and customizable API proxy that validates and transforms data on the fly
  • Request optimization with intelligent batching, retry, and caching to minimize API calls and costs

Prerequisites

Zoho Expense uses OAuth 2.0 for API authentication. Before creating a credential in Nexla, you must register an application in the Zoho API Console to obtain a Client ID and Client Secret. These credentials, combined with your Organization ID and the appropriate API base URL for your data center region, are required to complete the Nexla credential setup.

Register an Application in the Zoho API Console

  1. Sign in to the Zoho API Console using your Zoho account.

  2. Click GET STARTED (or Add Client) to begin registering a new OAuth application.

  3. Select Server-based Applications as the client type, since Nexla operates as a server-side integration.

  4. Fill in the required application details:

    • Client Name: Enter a descriptive name for the integration (e.g., Nexla Zoho Expense Integration).
    • Homepage URL: Enter your organization's homepage URL (e.g., https://nexla.io).
    • Authorized Redirect URI: Enter https://nexla.io/oauth/callback (or the redirect URI provided in the Nexla credential setup screen).
  5. Click Create to register the application.

  6. After successful registration, your Client ID and Client Secret will be displayed in the Client Secret tab of your application in the Zoho API Console. Copy and store these values securely—the Client Secret cannot be retrieved again after you leave the page.

Important

Keep your Client ID and Client Secret confidential. Do not share these credentials or store them in publicly accessible locations.

Identify Your Organization ID

The Zoho Expense Organization ID is required to scope API requests to the correct organization. You can retrieve it using one of the following methods:

  • Via the Zoho Expense API: Once OAuth credentials are configured, call the /organizations endpoint (GET https://expense.zoho.com/api/v1/organizations) to retrieve a list of organizations associated with your account. The organization_id field in the response contains the value needed.
  • Via the Zoho Expense Admin Console: Sign in to your Zoho Expense account as an administrator, navigate to Settings > Organization Profile, and locate the Organization ID displayed on the page.

Determine Your API Base URL

Zoho Expense operates across multiple data center regions. Select the base URL that corresponds to the region where your Zoho account is hosted:

RegionBase URL
United Stateshttps://expense.zoho.com/api/v1
Europehttps://expense.zoho.eu/api/v1
Indiahttps://expense.zoho.in/api/v1
Australiahttps://expense.zoho.com.au/api/v1
Japanhttps://expense.zoho.jp/api/v1

Additional information about Zoho OAuth setup and scopes is available in the Zoho OAuth 2.0 documentation and the Zoho Expense API authentication guide.

Authenticate

Credentials required

3-legged OAuth2 flow for delegated user access to Zoho Expense

FieldRequiredSecretDescription
Client IDYesNoOAuth client ID from Zoho API Console
Client SecretYesYesOAuth client secret from Zoho API Console
OAuth StateYesNoSecurity nonce for OAuth flow
API Base URLYesNoZoho Expense API base URL for your data center region. Allowed values: https://expense.zoho.com/api/v1; https://expense.zoho.eu/api/v1; https://expense.zoho.in/api/v1; https://expense.zoho.com.au/api/v1; https://expense.zoho.jp/api/v1
Organization IDYesNoZoho Expense Organization ID (obtain from GET /organizations or admin console)

Create a credential in Nexla

  1. To create a new Zoho Expense credential, after selecting the data source/destination type, click the Add Credential tile to open the Add New Credential overlay.

  2. Enter a name for the credential in the Credential Name field and a short, meaningful description in the Credential Description field.

    Zoho Expense authentication uses a 3-legged OAuth 2.0 flow. Nexla will use the Client ID and Client Secret you registered in the Zoho API Console to obtain an access token on behalf of your Zoho user account. The access token is valid for one hour and is automatically refreshed by Nexla using the stored refresh token.

  3. Enter the Client ID obtained from the Zoho API Console in the Client ID field. This value identifies your registered application to Zoho's authorization server.

  4. Enter the Client Secret obtained from the Zoho API Console in the Client Secret field. This secret is used to authorize the OAuth token exchange and should be treated as a password.

  5. Select the API Base URL that corresponds to your Zoho account's data center region from the API Base URL pulldown menu. The default value is https://expense.zoho.com/api/v1 (United States). Select the appropriate regional URL if your Zoho account is hosted in Europe, India, Australia, or Japan.

    Selecting the wrong base URL will result in authentication failures or empty API responses. Refer to the Zoho Expense API documentation to confirm the correct data center URL for your account.

  6. Enter your Zoho Expense Organization ID in the Organization ID field. This value scopes all API requests to the correct organization within your Zoho Expense account. See the Prerequisites section above for instructions on how to obtain your Organization ID.

  7. Click the Authorize button (or equivalent OAuth redirect button) to initiate the OAuth 2.0 authorization flow. You will be redirected to Zoho's login page to sign in and grant Nexla permission to access your Zoho Expense account. After granting access, you will be redirected back to Nexla and the access and refresh tokens will be automatically populated.

    The OAuth flow requires you to sign in with the Zoho account that owns or has access to the Zoho Expense organization you want to connect. Ensure that the account used has the appropriate permissions to access the expense data you intend to integrate.

  8. Click the Save button at the bottom of the overlay to save the configured credential. The newly added credential will now appear in a tile on the Authenticate screen during data source/destination creation.

Use as a data source

To create a new data flow, navigate to the Integrate section, and click the New Data Flow button. Select the Zoho Expense connector tile, then select the credential that will be used to connect to the Zoho Expense instance, and click Next; or, create a new Zoho Expense credential for use in this flow.

Endpoint templates

Nexla provides pre-built templates that can be used to rapidly configure data sources to ingest data from common Zoho Expense endpoints. Select the endpoint from which this source will fetch data from the Endpoint pulldown menu. Available endpoint templates are listed in the expandable boxes below. Click on an endpoint to see more information about it and how to configure your data source for this endpoint.

Get Organizations

Retrieves the list of Zoho Expense organizations associated with the authenticated user account. Use this endpoint to identify the organizations available to your Zoho Expense account and to obtain Organization IDs needed for other API operations.

  • This endpoint requires no additional configuration parameters. Selecting it will automatically retrieve all organizations accessible to the authenticated user account.
  • The response includes each organization's ID, name, and related metadata. The Organization ID values returned here can be used to configure the Organization ID field in your Zoho Expense credential if not already set.

For complete details about the organizations endpoint and its response fields, see the Zoho Expense API documentation.

Get Expense Category

Retrieves the details of a single expense category by its unique ID. Use this endpoint when you need to inspect or sync the properties of a specific expense category, such as its name, account code, or status.

  • Enter the unique identifier of the expense category you want to retrieve in the Expense Category ID field. This ID is assigned by Zoho Expense when a category is created and can be found by:

    • Using the List Expense Categories template to retrieve all categories and their corresponding IDs.
    • Viewing category details in the Zoho Expense admin console under Settings > Expense Categories.
  • The response returns all fields for the specified category, including the category name, associated account code, and active/inactive status.

The Expense Category ID is a required field for this endpoint. For reference information about expense category fields, see the Zoho Expense Expense Categories API documentation.

List Expense Categories

Retrieves a list of all expense categories in your Zoho Expense organization, with optional filters to include inactive or all categories. Use this endpoint to export your full category list for reporting, audits, or synchronization with external systems.

  • Optionally, configure the following filter parameters to refine the data returned:

    • Show Inactive — Set to true to include inactive (disabled) expense categories in the results, or leave empty to return only active categories. Inactive categories are those that have been hidden using the Disable Expense Category action.
    • Show All — Set to true to include all categories regardless of their active or inactive status. When both Show Inactive and Show All are provided, Show All takes precedence.
  • The response returns an array of expense category objects, each containing the category ID, name, account code, and status. Each element in the returned array is treated as a separate record in the Nexset produced by this source.

Leaving both filter parameters empty returns only active expense categories. For a full export including inactive categories, set Show All to true. See the Zoho Expense Expense Categories API documentation for additional details.

Get Currency

Retrieves the details of a single currency by its unique ID. Use this endpoint when you need to inspect or sync the configuration of a specific currency, such as its symbol, exchange rate, or formatting settings.

  • Enter the unique identifier of the currency you want to retrieve in the Currency ID field. This ID is assigned by Zoho Expense when a currency is added to the organization and can be found by:

    • Using the List Currencies template to retrieve all available currencies and their corresponding IDs.
    • Viewing currency settings in the Zoho Expense admin console under Settings > Currencies.
  • The response returns all fields for the specified currency, including the currency code (e.g., USD, EUR), symbol, exchange rate, and decimal formatting configuration.

The Currency ID is a required field for this endpoint. For reference information about currency fields, see the Zoho Expense Currencies API documentation.

List Currencies

Retrieves a list of all currencies configured in your Zoho Expense organization. Use this endpoint to export your full currency list for financial reporting, multi-currency reconciliation, or synchronization with external accounting systems.

  • This endpoint requires no additional configuration parameters. It automatically retrieves all currencies configured in the organization associated with your Zoho Expense credential.
  • The response returns an array of currency objects, each containing the currency ID, currency code, symbol, and exchange rate. Each element in the returned array is treated as a separate record in the Nexset produced by this source.

For complete details about currency fields and their definitions, see the Zoho Expense Currencies API documentation.

Get Tax

Retrieves the details of a specific tax by its unique ID. Use this endpoint when you need to inspect or sync a particular tax configuration, such as its name, rate, or type (simple or compound).

  • Enter the unique identifier of the tax you want to retrieve in the Tax ID field. This ID is assigned by Zoho Expense when a tax is created and can be found by:

    • Using the List Taxes template to retrieve all taxes and their corresponding IDs.
    • Viewing tax settings in the Zoho Expense admin console under Settings > Taxes.
  • The response returns all fields for the specified tax, including the tax name, percentage rate, and whether it is a simple or compound tax.

The Tax ID is a required field for this endpoint. For reference information about tax fields and their definitions, see the Zoho Expense Taxes API documentation.

List Taxes

Retrieves a list of all taxes configured in your Zoho Expense organization. Use this endpoint to export tax configurations for compliance reporting, accounting system synchronization, or auditing expense data with proper tax breakdowns.

  • This endpoint requires no additional configuration parameters. It automatically retrieves all taxes configured in the organization associated with your Zoho Expense credential.
  • The response returns an array of tax objects, each containing the tax ID, name, and percentage rate. Each element in the returned array is treated as a separate record in the Nexset produced by this source.

For complete details about tax fields and their definitions, see the Zoho Expense Taxes API documentation.

Get Tax Group

Retrieves the details of a specific tax group by its unique ID. Tax groups in Zoho Expense allow you to bundle multiple individual taxes together and apply them as a single composite tax. Use this endpoint when you need to inspect the configuration of a specific tax group, including the individual taxes it contains.

  • Enter the unique identifier of the tax group you want to retrieve in the Tax Group ID field. This ID is assigned by Zoho Expense when a tax group is created and can be found by:

    • Viewing tax group settings in the Zoho Expense admin console under Settings > Taxes > Tax Groups.
    • Referencing tax group IDs returned when listing expense data that includes tax group associations.
  • The response returns all fields for the specified tax group, including the group name, total combined rate, and the list of individual taxes included in the group.

Tax groups are distinct from individual taxes. For complete details about tax group fields and their definitions, see the Zoho Expense Tax Groups API documentation.

Once the selected endpoint template has been configured, click the Test button to the right of the endpoint selection menu to retrieve a sample of the data that will be fetched. Sample data will be displayed in the Endpoint Test Result panel on the right, allowing you to verify that the source is configured correctly before saving.

Manual configuration

Zoho Expense data sources can also be manually configured to ingest data from any valid Zoho Expense API endpoint, including endpoints not covered by the pre-built templates, chained API calls, or custom request parameters. Select the Advanced tab at the top of the configuration screen, and follow the instructions in Connect to Any API to configure the API method, endpoint URL, date/time and lookup macros, path to data, metadata, and request headers.

The base URL format for Zoho Expense endpoints is https://expense.zoho.com/api/v1/{'{endpoint_path}'} (substitute the base URL for your data center region—see Authenticate above for the full list). For example: list expense categories at https://expense.zoho.com/api/v1/expensecategories, list currencies at https://expense.zoho.com/api/v1/settings/currencies, and list taxes at https://expense.zoho.com/api/v1/settings/taxes. Common response data paths include $.expenseCategories[*], $.currencies[*], $.taxes[*], and $.organizations[*]; response status metadata (code, message) is returned alongside these arrays and can be captured via the Path to Metadata in Response field. You do not need to include the X-com-zoho-expense-organizationid or Authorization headers—these are automatically handled by Nexla based on your Zoho Expense credential configuration.

Once all of the relevant settings have been configured, click the Create button in the upper right corner of the screen to save and create the new Zoho Expense data source. Nexla will now begin ingesting data from the configured endpoint and will organize any data that it finds into one or more Nexsets.

Use as a destination

Click the + icon on the Nexset that will be sent to the Zoho Expense destination, and select the Send to Destination option from the menu. Select the Zoho Expense connector from the list of available destination connectors, then select the credential that will be used to connect to the Zoho Expense organization, and click Next; or, create a new Zoho Expense credential for use in this flow.

Endpoint templates

Nexla provides pre-built templates that can be used to rapidly configure destinations to send data to common Zoho Expense endpoints. Select the endpoint to which data will be sent from the Endpoint pulldown menu. Then, click on the template in the list below to expand it, and follow the instructions to configure additional endpoint settings.

Create Expense Category

Creates a new expense category in your Zoho Expense organization. Use this endpoint to add new spend categories—such as Travel, Meals, or Office Supplies—that employees can assign to their expense submissions.

  • This endpoint does not require additional URL parameters. The new category details (name, account code, and other properties) are transmitted as JSON in the request body, automatically populated from the Nexset data being sent.
  • Ensure your Nexset data includes the required fields for a Zoho Expense category. At minimum, the category name must be included in the data. Refer to the Zoho Expense Expense Categories API documentation for the complete list of required and optional fields.
  • Duplicate category names within the same organization may be rejected by the Zoho Expense API. Verify that the category name does not already exist before creating a new one.

The OAuth scope ZohoExpense.expensecategory.CREATE is required for this operation. Ensure this scope is included in your Zoho Expense credential configuration.

Update Expense Category

Updates the details of an existing expense category in your Zoho Expense organization. Use this endpoint to modify category properties such as the name, associated account code, or description.

  • Enter the unique identifier of the expense category to update in the Expense Category ID field. This ID is required to target the correct category for the update operation. Category IDs can be retrieved using the List Expense Categories or Get Expense Category source templates.
  • The updated category details are transmitted as JSON in the request body, automatically populated from the Nexset data being sent. Include only the fields you want to update; fields not included in the payload will retain their current values.

The OAuth scope ZohoExpense.expensecategory.UPDATE is required for this operation. Ensure this scope is included in your Zoho Expense credential configuration.

Delete Expense Category

Deletes an expense category from your Zoho Expense organization by its unique ID. Use this endpoint to permanently remove expense categories that are no longer needed.

  • Enter the unique identifier of the expense category to delete in the Expense Category ID field. This operation is permanent and cannot be undone—verify the correct Category ID before proceeding. Category IDs can be retrieved using the List Expense Categories or Get Expense Category source templates.
  • Categories that are currently in use by existing expense reports may not be deletable. Consider using the Disable Expense Category endpoint to deactivate a category without permanently removing it.
Important

Deleting an expense category is a permanent action. Ensure the category is no longer needed and is not referenced by active expense reports before proceeding.

The OAuth scope ZohoExpense.expensecategory.DELETE is required for this operation. Ensure this scope is included in your Zoho Expense credential configuration.

Enable Expense Category

Re-enables a previously disabled (inactive) expense category, making it available for use in new expense submissions. Use this endpoint when a category that was hidden needs to be reinstated for employees.

  • Enter the unique identifier of the expense category to enable in the Expense Category ID field. Only categories that are currently in an inactive state can be enabled with this endpoint. Category IDs can be retrieved using the List Expense Categories source template with the Show Inactive parameter set to true.
  • Once enabled, the category will immediately appear in the expense category list for employees submitting new expenses within the organization.

The OAuth scope ZohoExpense.expensecategory.UPDATE is required for this operation. Ensure this scope is included in your Zoho Expense credential configuration.

Disable Expense Category

Disables (hides) an active expense category, preventing it from being selected in new expense submissions without permanently deleting it. Use this endpoint to deactivate categories that are no longer in use while preserving historical data integrity.

  • Enter the unique identifier of the expense category to disable in the Expense Category ID field. Only active categories can be disabled with this endpoint. Category IDs can be retrieved using the List Expense Categories source template.
  • Disabled categories remain in the system and can be re-enabled at any time using the Enable Expense Category endpoint. Existing expense reports that reference the category are unaffected.

The OAuth scope ZohoExpense.expensecategory.UPDATE is required for this operation. Ensure this scope is included in your Zoho Expense credential configuration.

Create Currency

Adds a new currency to your Zoho Expense organization settings. Use this endpoint to enable additional currencies for multi-currency expense reporting and reimbursements.

  • This endpoint does not require additional URL parameters. The new currency details (currency code, symbol, exchange rate, and formatting settings) are transmitted as JSON in the request body, automatically populated from the Nexset data being sent.
  • Ensure your Nexset data includes the required fields for a Zoho Expense currency. At minimum, the currency code must be included. Refer to the Zoho Expense Currencies API documentation for the complete list of required and optional fields.

The OAuth scope ZohoExpense.settings.CREATE is required for this operation. Ensure this scope is included in your Zoho Expense credential configuration.

Update Currency

Updates the details of an existing currency in your Zoho Expense organization, such as the exchange rate, symbol, or formatting settings. Use this endpoint to keep currency exchange rates up-to-date for accurate multi-currency expense reporting.

  • Enter the unique identifier of the currency to update in the Currency ID field. Currency IDs can be retrieved using the List Currencies or Get Currency source templates.
  • The updated currency details are transmitted as JSON in the request body, automatically populated from the Nexset data being sent. Include only the fields you want to update; fields not included will retain their current values.

The OAuth scope ZohoExpense.settings.UPDATE is required for this operation. Ensure this scope is included in your Zoho Expense credential configuration.

Delete Currency

Deletes a currency from your Zoho Expense organization settings by its unique ID. Use this endpoint to remove currencies that are no longer used for expense reporting.

  • Enter the unique identifier of the currency to delete in the Currency ID field. This operation is permanent—verify the correct Currency ID before proceeding. Currency IDs can be retrieved using the List Currencies or Get Currency source templates.
  • Currencies that are currently referenced by existing expense reports or transactions may not be deletable by the Zoho Expense API.
Important

Deleting a currency is a permanent action. Ensure the currency is no longer needed and is not referenced by active expense data before proceeding.

The OAuth scope ZohoExpense.settings.DELETE is required for this operation. Ensure this scope is included in your Zoho Expense credential configuration.

Create Tax

Creates a new tax configuration in your Zoho Expense organization settings. Use this endpoint to add tax types—such as VAT, GST, or sales tax—that can be applied to expense submissions for accurate financial reporting.

  • This endpoint does not require additional URL parameters. The new tax details (tax name, percentage rate, and type) are transmitted as JSON in the request body, automatically populated from the Nexset data being sent.
  • Ensure your Nexset data includes the required fields for a Zoho Expense tax. At minimum, the tax name and percentage rate must be included. Refer to the Zoho Expense Taxes API documentation for the complete list of required and optional fields.

The OAuth scope ZohoExpense.settings.CREATE is required for this operation. Ensure this scope is included in your Zoho Expense credential configuration.

Update Tax

Updates the details of an existing tax in your Zoho Expense organization, such as the tax name or percentage rate. Use this endpoint to keep tax configurations accurate and compliant with current tax regulations.

  • Enter the unique identifier of the tax to update in the Tax ID field. Tax IDs can be retrieved using the List Taxes or Get Tax source templates.
  • The updated tax details are transmitted as JSON in the request body, automatically populated from the Nexset data being sent. Include only the fields you want to update; fields not included will retain their current values.

The OAuth scope ZohoExpense.settings.UPDATE is required for this operation. Ensure this scope is included in your Zoho Expense credential configuration.

Delete Tax

Deletes a tax configuration from your Zoho Expense organization settings by its unique ID. Use this endpoint to remove tax configurations that are no longer applicable.

  • Enter the unique identifier of the tax to delete in the Tax ID field. This operation is permanent—verify the correct Tax ID before proceeding. Tax IDs can be retrieved using the List Taxes or Get Tax source templates.
  • Taxes that are referenced by existing expense reports may not be deletable by the Zoho Expense API.
Important

Deleting a tax configuration is a permanent action. Ensure the tax is no longer needed and is not referenced by active expense data before proceeding.

The OAuth scope ZohoExpense.settings.DELETE is required for this operation. Ensure this scope is included in your Zoho Expense credential configuration.

Manual configuration

Zoho Expense destinations can also be manually configured to send data to any valid Zoho Expense API endpoint. Select the Advanced tab at the top of the configuration screen, and follow the instructions in Connect to Any API to configure the API method, data format, endpoint URL, request headers, attribute exclusions, record batching, and response webhooks.

Zoho Expense write operations use POST (create), PUT (update), or DELETE (remove), and the API requires data in JSON format for all write operations. For update or delete operations, include the ID of the object to be targeted at the end of the URL—for example, create an expense category at https://expense.zoho.com/api/v1/expensecategories, update a specific expense category at https://expense.zoho.com/api/v1/expensecategories/{'{category_id}'}, and create a tax at https://expense.zoho.com/api/v1/settings/taxes (substitute the base URL for your data center region—see Authenticate above for the full list). You do not need to include the X-com-zoho-expense-organizationid or Authorization headers—these are automatically handled by Nexla based on your Zoho Expense credential configuration.

Save & activate

Once all endpoint settings have been configured, click the Done button in the upper right corner of the screen to save and create the destination. To send the data to the configured Zoho Expense endpoint, open the destination resource menu, and select Activate.

The Nexset data will not be sent to Zoho Expense until the destination is activated. Destinations can be activated immediately or at a later time, providing full control over data movement.