Reports

Reports AI Tools

Open in ChatGPT

Open in ChatGPT to ask questions about this page

Open in Claude

Open in Claude to ask questions about this page

Copy as Markdown

Copy this page as markdown to use with AI assistants

View as Markdown

Open this page as markdown in a new tab

A report groups one or more expenses together for submission, approval, and reimbursement. This module covers the full lifecycle of a report - from creation in draft state, through submission and approval, to reimbursement and archival.

Download Reports OpenAPI Document
End Points
Create a report
List of all reports
Delete multiple reports
Update a report
Retrieve details of a report
Delete a report
Submit a report
Approve a report
Reject a report
Reimburse a report
Approval history of a report
Take back a report
Archive a report
Unarchive a report
Share a report
Forward approval of a report
Reject an expense in a report
Bulk reject expenses in a report
Validate a report
Retrieve the receipt of a report
Add a comment to a report
Delete a comment of a report
Associate tags to a report
Add expenses to a report
Remove expenses from a report
Upload attachment(s) to a report
Retrieve an attachment of a report
Delete an attachment of a report
Re-upload an attachment of a report
Remove advance payments from a report
Retrieve the budget summary of a report
Retrieve the reimbursement details of a report
Change the status of a report
Export a report
Cancel a reimbursement of a report
Add an expense to a report
Generate a PDF for a report
Submit multiple reports
Approve multiple reports
Reject multiple reports
Reimburse multiple reports
Archive multiple reports
Unarchive multiple reports
Forward approval of multiple reports
Change the status of multiple reports
Reset the substatus of multiple reports
Bulk update fields of multiple reports

Attribute

report_id
string
Unique ID for report generated by the server . This is used as identifier.
report_name
string
Name of the report.
description
string
Description of the report.
report_number
string
Report Number.
start_date
string
Start date of the report.
end_date
string
End date of the report.
status
string
Status of the report. Possible values can be draft or submitted or approved or rejected or reimbursed or recalled.
currency_id
string
Unique ID for currency.
price_precision
integer
Precise amount upto n decimal points.
currency_code
string
Currency code.
total
double
Total amount.
reimbursable_total
double
Reimbursable amount.
non_reimbursable_total
double
Non reimbursable total.
created_time
string
Time when the report was created.
created_date
string
Date when the report was created.
created_by_id
string
ID of the person who created the report.
created_by_name
string
Name of the person who created the report.
created_by_email
string
Email ID of the person who created the report.
tags
array
Tags associated with the Report.
Show Sub-Attributes arrow
tag_id
string
Unique ID for Tag generated by the server.
tag_name
string
Name of the Tag.
tag_option_id
string
Unique ID for Tag option generated by the server.
tag_option_name
string
Name of the Tag Option.
expenses
array
Expenses associated with User.
Show Sub-Attributes arrow
date
string
Date of Expense.
receipt_name
string
Receipt Name
tax_amount
double
Tax amount.
start_reading
string
Start reading of the odometer.
category_name
string
Name of the Expense Category.
line_item_count
integer
Number of Line Items.
paid_through_account_id
string
Unique ID for the paid through account.
documents
array
Details of Documents attached.
Show Sub-Attributes arrow
file_name
string
Name of the Document.
file_size_formatted
string
Formatted value of File Size.
attachment_order
integer
Order of the Attached Document.
document_id
string
Unique Id for the Document.
project_name
string
Name of the project.
per_diem_rate
double
Rate per Diem.
per_diem_days
double
Number of Days for Diem.
project_id
string
Unique ID for project.
mileage_rate
double
Rate for mileage.
order
integer
Order of the expense in Report.
expense_type
string
Type of Expense.
exchange_rate
double
Exchange rate for the foreign currency.
is_inclusive_tax
boolean
Whether the Expense is inclusive of tax. It can either be true or false.
custom_fields
array
Custom Fields related to Expense.
Show Sub-Attributes arrow
customfield_id
string
Unique Id for the Custom Field.
label
string
Label of the Custom Field.
value
string
Value of the Custom Field.
attendees
string
Attendees of the Expense.
per_diem_name
string
Name of the Per Diem.
merchant_name
string
Name of the merchant.
transaction_description
string
Decription for Transaction.
reference_number
string
Reference Number
tax_id
string
Unique Id for the tax.
is_personal
boolean
Whether the expense is personal. It can either be true or false.
due_days
string
Number of days till the due date.
comments_count
integer
Number of Comments.
distance
double
Distance travelled.
policy_id
string
Unique Id for the Policy.
description
string
Description of the report.
merchant_id
string
Unique Id for Merchant.
currency_code
string
Currency code.
end_reading
long
End readind of the odometer.
bcy_total
double
Total in base currency.
total
double
Total amount.
category_id
string
Unique Id for the expense category.
receipt_type
string
Type of receipt.
maximum_allowed_amount
double
Maximum allowed expense amount.
is_uncategorized
boolean
Whether the expense is Uncategorized. It can either be true or false.
is_mandatory_fields_missing
boolean
Whether the mandatory fields are missing. It can either be true or false.
paid_through_account_name
string
Name of the paid through account.
amount
double
Total Amount.
payment_mode
string
Mode of payment for the expense.
last_modified_time
string
Time when the report was last modified.
per_diem_id
string
Unique Id for Per Diem.
tax_name
string
Name of the tax.
bcy_tax_amount
double
Tax Amount in Base Currency.
vehicle_type
string
Type of Vehicle.
is_billable
boolean
Whether the expense is a billable expense. It can either be true or false.
mileage_unit
string
Unit of mileage. Can be km or mile.
is_expired
boolean
Whether the expense is expired. It can either be true or false.
receipt_required_amount
double
Required Amount for Receipt.
is_reimbursable
boolean
Whether the expense is reimbursable. It can either be true or false.
expired_by
string
No. of days since the expense has expired.
tax_percentage
double
Percentage of Tax.
location
string
Location.
customer_name
string
Name of the Customer.
customer_id
string
Unique Id for the Customer.
expense_id
string
Unique Id of the Expense.
currency_id
string
Unique ID for currency.
expired_expense_count
integer
Number of expenses expired.
reimbursable_expenses_count
integer
Number of expenses that can be reimbursed.
non_reimbursable_expenses_count
integer
Number of expenses that cannot be reimbursed.
custom_fields
array
Custom Fields related to Expense.
Show Sub-Attributes arrow
customfield_id
string
Unique Id for the Custom Field.
label
string
Label of the Custom Field.
value
string
Value of the Custom Field.
customer_id
string
Unique Id for the Customer.
customer_name
string
Name of the Customer.
project_id
string
Unique ID for project.
project_name
string
Name of the project.
employee_number
string
Employee Number.
department_id
string
Unique Id of the department.
department_name
string
Name of the department.
policy_id
string
Unique Id for the Policy.
policy_name
string
Name of the Policy.

Example

{ "report_id": "16367000000081005", "report_name": "Trip to SFA", "description": "To client office", "report_number": "ER-00001", "start_date": "2017-02-07", "end_date": "2017-02-18", "status": "submitted", "currency_id": "16367000000000099", "price_precision": 2, "currency_code": "INR", "total": 70000, "reimbursable_total": 70000, "non_reimbursable_total": 0, "created_time": "2017-02-28T18:18:03+0530", "created_date": "2017-02-28", "created_by_id": "16367000000073071", "created_by_name": "Will Smith", "created_by_email": "will.smith@gmail.com", "tags": [ { "tag_id": "16367000000000301", "tag_name": "Tag 1", "tag_option_id": "16367000000225001", "tag_option_name": "Option 1" } ], "expenses": [ { "date": "2017-02-20", "receipt_name": "receipt1.jpg", "tax_amount": 5000, "start_reading": "", "category_name": "Lodging", "line_item_count": 1, "paid_through_account_id": "16367000000036003", "documents": [ { "file_name": "receipt1.jpg", "file_size_formatted": "35.6 KB", "attachment_order": 1, "document_id": "16367000000078085" } ], "project_name": "Brochure Design - Spa", "per_diem_rate": 0, "per_diem_days": 0, "project_id": "16367000000223045", "mileage_rate": 0, "order": 0, "expense_type": "non_mileage", "exchange_rate": 1, "is_inclusive_tax": false, "custom_fields": [ { "customfield_id": "16367000000277001", "label": "Other Name", "value": "Trip" } ], "attendees": "Will Smith", "per_diem_name": "", "merchant_name": "ABS Solutions", "transaction_description": "Has to be done Immediately..", "reference_number": "DD145", "tax_id": "16367000000219093", "is_personal": false, "due_days": "Due in 15 days", "comments_count": 0, "distance": 0, "policy_id": "16367000000092011", "description": "To client office", "merchant_id": "16367000000074027", "currency_code": "INR", "end_reading": "", "bcy_total": 70000, "total": 70000, "category_id": "16367000000033011", "receipt_type": "jpg", "maximum_allowed_amount": 0, "is_uncategorized": false, "is_mandatory_fields_missing": false, "paid_through_account_name": "Employee Reimbursements", "amount": 70000, "payment_mode": "Check", "last_modified_time": "2017-02-28T18:31:09+0530", "per_diem_id": "", "tax_name": "Service", "bcy_tax_amount": 2000, "vehicle_type": "Bike", "is_billable": false, "mileage_unit": "km", "is_expired": false, "receipt_required_amount": 0, "is_reimbursable": true, "expired_by": "", "tax_percentage": 4, "location": "Washington", "customer_name": "Peter", "customer_id": "16367000000088005", "expense_id": "16367000000078079", "currency_id": "16367000000000099" } ], "expired_expense_count": 0, "reimbursable_expenses_count": 1, "non_reimbursable_expenses_count": 0, "custom_fields": [ { "customfield_id": "16367000000277001", "label": "Other Name", "value": "Trip" } ], "customer_id": "16367000000088005", "customer_name": "Peter", "project_id": "16367000000223045", "project_name": "Brochure Design - Spa", "employee_number": "E001", "department_id": "16367000000093001", "department_name": "Finance", "policy_id": "16367000000092011", "policy_name": "Savings" }

Create a report AI Tools

Open in ChatGPT

Open in ChatGPT to ask questions about this page

Open in Claude

Open in Claude to ask questions about this page

Copy as Markdown

Copy this page as markdown to use with AI assistants

View as Markdown

Open this page as markdown in a new tab

Create a new report in your organization by providing the report name, start date, end date, and organization ID - all of which are mandatory. Optionally, you can include a description of the report's purpose, attach existing expenses by passing their expense IDs, associate the report with a customer or project, add custom field values, and apply tags for categorization. The expenses array accepts objects containing the expense_id and an order value to control sequencing within the report.
OAuth Scope : ZohoExpense.expensereport.CREATE

Arguments

report_name
string
(Required)
Name of the report.
description
string
Description of the report.
start_date
string
(Required)
Start date of the report.
end_date
string
(Required)
End date of the report.
expenses
array
Expenses associated with User.
Show Sub-Attributes arrow
expense_id
string
(Required)
Unique Id of the Expense.
order
integer
Order of the expense in Report.
custom_fields
array
Custom Fields related to Expense.
Show Sub-Attributes arrow
customfield_id
string
(Required)
Unique Id for the Custom Field.
value
string
(Required)
Value of the Custom Field.
customer_id
string
Unique Id for the Customer.
project_id
string
Unique ID for project.
tags
array
Tags associated with the Report.
Show Sub-Attributes arrow
tag_id
string
(Required)
Unique ID for Tag generated by the server.
tag_option_id
string
(Required)
Unique ID for Tag option generated by the server.

Headers

X-com-zoho-expense-organizationid
string
(Required)
ID of the organization

Request Example

Click to copy
parameters_data='{"field1":"value1","field2":"value2"}'; headers_data = Map(); headers_data.put("X-com-zoho-expense-organizationid", "10234695"); headers_data.put("Authorization", "Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f"); response = invokeUrl [ url: "https://www.zohoapis.com/expense/v1/expensereports" type: POST headers: headers_data content-type: application/json parameters: parameters_data connection: <connection_name> ]; info response;
OkHttpClient client = new OkHttpClient(); MediaType mediaType = MediaType.parse("application/json"); RequestBody body = RequestBody.create(mediaType, "{\"field1\":\"value1\",\"field2\":\"value2\"}"); Request request = new Request.Builder() .url("https://www.zohoapis.com/expense/v1/expensereports") .post(body) .addHeader("X-com-zoho-expense-organizationid", "10234695") .addHeader("Authorization", "Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f") .addHeader("content-type", "application/json") .build(); Response response = client.newCall(request).execute();
const options = { method: 'POST', headers: { 'X-com-zoho-expense-organizationid': '10234695', Authorization: 'Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f', 'content-type': 'application/json' }, body: '{"field1":"value1","field2":"value2"}' }; fetch('https://www.zohoapis.com/expense/v1/expensereports', options) .then(response => response.json()) .then(response => console.log(response)) .catch(err => console.error(err));
import http.client conn = http.client.HTTPSConnection("www.zohoapis.com") payload = "{\"field1\":\"value1\",\"field2\":\"value2\"}" headers = { 'X-com-zoho-expense-organizationid': "10234695", 'Authorization': "Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f", 'content-type': "application/json" } conn.request("POST", "/expense/v1/expensereports", payload, headers) res = conn.getresponse() data = res.read() print(data.decode("utf-8"))
const http = require("https"); const options = { "method": "POST", "hostname": "www.zohoapis.com", "port": null, "path": "/expense/v1/expensereports", "headers": { "X-com-zoho-expense-organizationid": "10234695", "Authorization": "Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f", "content-type": "application/json" } }; const req = http.request(options, function (res) { const chunks = []; res.on("data", function (chunk) { chunks.push(chunk); }); res.on("end", function () { const body = Buffer.concat(chunks); console.log(body.toString()); }); }); req.write(JSON.stringify({field1: 'value1', field2: 'value2'})); req.end();
curl --request POST \ --url https://www.zohoapis.com/expense/v1/expensereports \ --header 'Authorization: Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f' \ --header 'X-com-zoho-expense-organizationid: 10234695' \ --header 'content-type: application/json' \ --data '{"field1":"value1","field2":"value2"}'

Body Parameters

Click to copy
{ "report_name": "Trip to SFA", "description": "To client office", "start_date": "2017-02-07", "end_date": "2017-02-18", "expenses": [ { "expense_id": "16367000000078079", "order": 0 } ], "custom_fields": [ { "customfield_id": "16367000000277001", "value": "Trip" } ], "customer_id": "16367000000088005", "project_id": "16367000000223045", "tags": [ { "tag_id": "16367000000000301", "tag_option_id": "16367000000225001" } ] }

Response Example

{ "code": 0, "message": "Expense report created successfully.", "expense_report": { "report_id": "16367000000081005", "report_name": "Trip to SFA", "description": "To client office", "report_number": "ER-00001", "start_date": "2017-02-07", "end_date": "2017-02-18", "status": "submitted", "currency_id": "16367000000000099", "price_precision": 2, "currency_code": "INR", "total": 70000, "reimbursable_total": 70000, "non_reimbursable_total": 0, "created_time": "2017-02-28T18:18:03+0530", "created_date": "2017-02-28", "created_by_id": "16367000000073071", "created_by_name": "Will Smith", "created_by_email": "will.smith@gmail.com", "tags": [ { "tag_id": "16367000000000301", "tag_name": "Tag 1", "tag_option_id": "16367000000225001", "tag_option_name": "Option 1" } ], "expenses": [ { "date": "2017-02-20", "receipt_name": "receipt1.jpg", "tax_amount": 5000, "start_reading": "", "category_name": "Lodging", "line_item_count": 1, "paid_through_account_id": "16367000000036003", "documents": [ { "file_name": "receipt1.jpg", "file_size_formatted": "35.6 KB", "attachment_order": 1, "document_id": "16367000000078085" } ], "project_name": "Brochure Design - Spa", "per_diem_rate": 0, "per_diem_days": 0, "project_id": "16367000000223045", "mileage_rate": 0, "order": 0, "expense_type": "non_mileage", "exchange_rate": 1, "is_inclusive_tax": false, "custom_fields": [ { "customfield_id": "16367000000277001", "label": "Other Name", "value": "Trip" } ], "attendees": "Will Smith", "per_diem_name": "", "merchant_name": "ABS Solutions", "transaction_description": "Has to be done Immediately..", "reference_number": "DD145", "tax_id": "16367000000219093", "is_personal": false, "due_days": "Due in 15 days", "comments_count": 0, "distance": 0, "policy_id": "16367000000092011", "description": "To client office", "merchant_id": "16367000000074027", "currency_code": "INR", "end_reading": "", "bcy_total": 70000, "total": 70000, "category_id": "16367000000033011", "receipt_type": "jpg", "maximum_allowed_amount": 0, "is_uncategorized": false, "is_mandatory_fields_missing": false, "paid_through_account_name": "Employee Reimbursements", "amount": 70000, "payment_mode": "Check", "last_modified_time": "2017-02-28T18:31:09+0530", "per_diem_id": "", "tax_name": "Service", "bcy_tax_amount": 2000, "vehicle_type": "Bike", "is_billable": false, "mileage_unit": "km", "is_expired": false, "receipt_required_amount": 0, "is_reimbursable": true, "expired_by": "", "tax_percentage": 4, "location": "Washington", "customer_name": "Peter", "customer_id": "16367000000088005", "expense_id": "16367000000078079", "currency_id": "16367000000000099" } ], "expired_expense_count": 0, "reimbursable_expenses_count": 1, "non_reimbursable_expenses_count": 0, "custom_fields": [ { "customfield_id": "16367000000277001", "label": "Other Name", "value": "Trip" } ], "customer_id": "16367000000088005", "customer_name": "Peter", "project_id": "16367000000223045", "project_name": "Brochure Design - Spa", "employee_number": "E001", "department_id": "16367000000093001", "department_name": "Finance", "policy_id": "16367000000092011", "policy_name": "Savings" } }

List of all reports AI Tools

Open in ChatGPT

Open in ChatGPT to ask questions about this page

Open in Claude

Open in Claude to ask questions about this page

Copy as Markdown

Copy this page as markdown to use with AI assistants

View as Markdown

Open this page as markdown in a new tab

Retrieve a list of all reports belonging to your organization. You must provide the organization ID. You can narrow down results by filtering on report status (draft, submitted, approved, rejected, reimbursed, or recalled) using the filter_by query parameter. The response returns each report's summary information including report name, number, status, total amounts, submission and approval dates, approver details, policy info, and custom field values.
OAuth Scope : ZohoExpense.expensereport.READ

Query Parameters

filter_by
string
For Filtering Expense Reports based on status.
page
integer
Page number to be fetched. Default value is 1.
per_page
integer
Number of records to be fetched per page. Default value is 200.
status
string
Filter by report status (comma-separated, lowercase). Values: All, submitted, recalled, approved, unapproved, reimbursed, rejected, overdue, unsubmitted, draft, archived, modifiable.
type
string
Filter by report type. Common values: report, approval, myapproval, sharedreport, trip.
search_text
string
Free-text search across the report name, number, and description.
export_status
string
Filter by export state.
sort_column
string
Column to sort the list by. Supported values include start_date, end_date, approved_date, due_date, report_name, report_number, created_time, total, last_submitted_date, submitted_by, submitted_date, submitter_name, approver_id, approver_name, status, customer_name, project_name, reimbursable_total, last_modified_time, trip_status, trip_start_date, trip_end_date, claim_type_name, reimbursement_date.
report_shared_type
string
Restrict the list by sharing relationship.
violation_type
string
Filter by policy violation type.
sub_status
string
Filter by sub-status code (alphanumeric/underscore, up to 10 chars).
user_email
string
Lookup reports by submitter email. Accepts a username, domain or full email.
ozs_name
string
Restrict to reports originating from a specific integration source.
user_agent
string
Hint about the calling user-agent context.
view_type
string
Caller view-type context. Refer to the view_type regex in security configuration.
customview_id
string
Apply a saved custom view's filter set.
user_id
string
Filter by User Id.
customer_id
string
Filter by Customer Id.
project_id
string
Filter by Project Id.
policy_id
string
Filter by Policy Id.
department_id
string
Filter by Department Id.
approver_id
string
Filter by Approver Id.
submitted_by
string
Filter by Submitted By.
submitted_to
string
Filter by Submitted To.
approved_by
string
Filter by Approved By.
created_by
string
Filter by Created By.
claim_type_id
string
Filter by Claim Type Id.
trip_id
string
Filter by Trip Id.
imprest_account_id
string
Filter by Imprest Account Id.
rcy_currency_id
string
Filter by Rcy Currency Id.
zcrm_account_id
string
Filter by Crm Account Id.
zcrm_contact_id
string
Filter by Crm Contact Id.
zcrm_potential_id
string
Filter by Crm Potential Id.
is_imprest_report
boolean
When true, returns only imprest reports.
is_user_view
boolean
When true, restricts the list to the user view.
is_international
boolean
When true, returns only international reports.
quickCreateReport
boolean
Internal flag used by the quick-create flow.
search_criteria
boolean
When true, applies the saved search criteria.
can_associate_report_to_batch
boolean
Restrict to reports that can be associated to a payment batch.
user_ids
string
Filter by multiple user IDs (comma-separated, up to 50).
policy_ids
string
Filter by multiple policy IDs (comma-separated, up to 50; -1 allowed for "no policy").
trip_status
string
Filter by trip status (comma-separated, up to 8). Values: All, draft, submitted, approved, rejected, cancelled, closed, recalled.
tag_option_id1
string
Tag slot 1: comma-separated list of tag option IDs (or `all`, `untagged`). Up to 100 values.
tag_option_id2
string
Tag slot 2: comma-separated list of tag option IDs (or `all`, `untagged`). Up to 100 values.
tag_option_id3
string
Tag slot 3: comma-separated list of tag option IDs (or `all`, `untagged`). Up to 100 values.
tag_option_id4
string
Tag slot 4: comma-separated list of tag option IDs (or `all`, `untagged`). Up to 100 values.
tag_option_id5
string
Tag slot 5: comma-separated list of tag option IDs (or `all`, `untagged`). Up to 100 values.
tag_option_id6
string
Tag slot 6: comma-separated list of tag option IDs (or `all`, `untagged`). Up to 100 values.
tag_option_id7
string
Tag slot 7: comma-separated list of tag option IDs (or `all`, `untagged`). Up to 100 values.
tag_option_id8
string
Tag slot 8: comma-separated list of tag option IDs (or `all`, `untagged`). Up to 100 values.
tag_option_id9
string
Tag slot 9: comma-separated list of tag option IDs (or `all`, `untagged`). Up to 100 values.
tag_option_id10
string
Tag slot 10: comma-separated list of tag option IDs (or `all`, `untagged`). Up to 100 values.
name
string
Search by name. Supports variants: name_startswith, name_contains, name_in and name_not_in. Maximum length is 100 characters per term.
report_number
string
Search by report number. Supports variants: report_number_startswith, report_number_contains, report_number_in and report_number_not_in. Maximum length is 100 characters per term.
description
string
Search by description. Supports variants: description_startswith, description_contains, description_in and description_not_in. Maximum length is 100 characters per term.
customer_name
string
Search by customer name. Supports variants: customer_name_startswith, customer_name_contains, customer_name_in and customer_name_not_in. Maximum length is 100 characters per term.
project_name
string
Search by project name. Supports variants: project_name_startswith, project_name_contains, project_name_in and project_name_not_in. Maximum length is 100 characters per term.
department_name
string
Search by department name. Supports variants: department_name_startswith, department_name_contains, department_name_in and department_name_not_in. Maximum length is 100 characters per term.
start_date
date
Start date of the report period (yyyy-mm-dd). Supports variants: start_date_start, start_date_end, start_date_before and start_date_after.
start_date_start
date
Filter for reports where start_date is on or after the given date (yyyy-mm-dd).
start_date_end
date
Filter for reports where start_date is on or before the given date (yyyy-mm-dd).
start_date_before
date
Filter for reports where start_date is strictly before the given date (exclusive, yyyy-mm-dd).
start_date_after
date
Filter for reports where start_date is strictly after the given date (exclusive, yyyy-mm-dd).
end_date
date
End date of the report period (yyyy-mm-dd). Supports variants: end_date_start, end_date_end, end_date_before and end_date_after.
end_date_start
date
Filter for reports where end_date is on or after the given date (yyyy-mm-dd).
end_date_end
date
Filter for reports where end_date is on or before the given date (yyyy-mm-dd).
end_date_before
date
Filter for reports where end_date is strictly before the given date (exclusive, yyyy-mm-dd).
end_date_after
date
Filter for reports where end_date is strictly after the given date (exclusive, yyyy-mm-dd).
submitted_date
date
Date the report was submitted for approval (yyyy-mm-dd). Supports variants: submitted_date_start, submitted_date_end, submitted_date_before and submitted_date_after.
submitted_date_start
date
Filter for reports where submitted_date is on or after the given date (yyyy-mm-dd).
submitted_date_end
date
Filter for reports where submitted_date is on or before the given date (yyyy-mm-dd).
submitted_date_before
date
Filter for reports where submitted_date is strictly before the given date (exclusive, yyyy-mm-dd).
submitted_date_after
date
Filter for reports where submitted_date is strictly after the given date (exclusive, yyyy-mm-dd).
due_date
date
Due date for the report (yyyy-mm-dd). Supports variants: due_date_start, due_date_end, due_date_before and due_date_after.
due_date_start
date
Filter for reports where due_date is on or after the given date (yyyy-mm-dd).
due_date_end
date
Filter for reports where due_date is on or before the given date (yyyy-mm-dd).
due_date_before
date
Filter for reports where due_date is strictly before the given date (exclusive, yyyy-mm-dd).
due_date_after
date
Filter for reports where due_date is strictly after the given date (exclusive, yyyy-mm-dd).
date
date
Report date (yyyy-mm-dd). Supports variants: date_start, date_end, date_before and date_after.
date_start
date
Filter for reports where date is on or after the given date (yyyy-mm-dd).
date_end
date
Filter for reports where date is on or before the given date (yyyy-mm-dd).
date_before
date
Filter for reports where date is strictly before the given date (exclusive, yyyy-mm-dd).
date_after
date
Filter for reports where date is strictly after the given date (exclusive, yyyy-mm-dd).
approved_date
date
Date the report was approved (yyyy-mm-dd). Supports variants: approved_date_start, approved_date_end, approved_date_before and approved_date_after.
approved_date_start
date
Filter for reports where approved_date is on or after the given date (yyyy-mm-dd).
approved_date_end
date
Filter for reports where approved_date is on or before the given date (yyyy-mm-dd).
approved_date_before
date
Filter for reports where approved_date is strictly before the given date (exclusive, yyyy-mm-dd).
approved_date_after
date
Filter for reports where approved_date is strictly after the given date (exclusive, yyyy-mm-dd).
last_modified_date
date
Date the report was last modified (yyyy-mm-dd). Supports variants: last_modified_date_start, last_modified_date_end, last_modified_date_before and last_modified_date_after.
last_modified_date_start
date
Filter for reports where last_modified_date is on or after the given date (yyyy-mm-dd).
last_modified_date_end
date
Filter for reports where last_modified_date is on or before the given date (yyyy-mm-dd).
last_modified_date_before
date
Filter for reports where last_modified_date is strictly before the given date (exclusive, yyyy-mm-dd).
last_modified_date_after
date
Filter for reports where last_modified_date is strictly after the given date (exclusive, yyyy-mm-dd).
last_modified_time
date-time
Datetime the report was last modified (UTC). Supports variants: last_modified_time_start, last_modified_time_end, last_modified_time_before and last_modified_time_after.
last_modified_time_start
date-time
Filter for reports where last_modified_time is start the given datetime (UTC).
last_modified_time_end
date-time
Filter for reports where last_modified_time is end the given datetime (UTC).
last_modified_time_before
date-time
Filter for reports where last_modified_time is before the given datetime (UTC).
last_modified_time_after
date-time
Filter for reports where last_modified_time is after the given datetime (UTC).
amount
double
Filter by total report amount. Supports variants: amount_start, amount_end, amount_less_than, amount_less_equals, amount_greater_than and amount_greater_equals.
amount_start
double
Filter for reports where amount matches the start comparator.
amount_end
double
Filter for reports where amount matches the end comparator.
amount_less_than
double
Filter for reports where amount matches the less than comparator.
amount_less_equals
double
Filter for reports where amount matches the less equals comparator.
amount_greater_than
double
Filter for reports where amount matches the greater than comparator.
amount_greater_equals
double
Filter for reports where amount matches the greater equals comparator.
reimbursable_amount
double
Filter by reimbursable amount. Supports variants: reimbursable_amount_start, reimbursable_amount_end, reimbursable_amount_less_than, reimbursable_amount_less_equals, reimbursable_amount_greater_than and reimbursable_amount_greater_equals.
reimbursable_amount_start
double
Filter for reports where reimbursable_amount matches the start comparator.
reimbursable_amount_end
double
Filter for reports where reimbursable_amount matches the end comparator.
reimbursable_amount_less_than
double
Filter for reports where reimbursable_amount matches the less than comparator.
reimbursable_amount_less_equals
double
Filter for reports where reimbursable_amount matches the less equals comparator.
reimbursable_amount_greater_than
double
Filter for reports where reimbursable_amount matches the greater than comparator.
reimbursable_amount_greater_equals
double
Filter for reports where reimbursable_amount matches the greater equals comparator.

Headers

X-com-zoho-expense-organizationid
string
(Required)
ID of the organization

Request Example

Click to copy
headers_data = Map(); headers_data.put("X-com-zoho-expense-organizationid", "10234695"); headers_data.put("Authorization", "Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f"); response = invokeUrl [ url: "https://www.zohoapis.com/expense/v1/expensereports" type: GET headers: headers_data connection: <connection_name> ]; info response;
OkHttpClient client = new OkHttpClient(); Request request = new Request.Builder() .url("https://www.zohoapis.com/expense/v1/expensereports") .get() .addHeader("X-com-zoho-expense-organizationid", "10234695") .addHeader("Authorization", "Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f") .build(); Response response = client.newCall(request).execute();
const options = { method: 'GET', headers: { 'X-com-zoho-expense-organizationid': '10234695', Authorization: 'Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f' } }; fetch('https://www.zohoapis.com/expense/v1/expensereports', options) .then(response => response.json()) .then(response => console.log(response)) .catch(err => console.error(err));
import http.client conn = http.client.HTTPSConnection("www.zohoapis.com") headers = { 'X-com-zoho-expense-organizationid': "10234695", 'Authorization': "Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f" } conn.request("GET", "/expense/v1/expensereports", headers=headers) res = conn.getresponse() data = res.read() print(data.decode("utf-8"))
const http = require("https"); const options = { "method": "GET", "hostname": "www.zohoapis.com", "port": null, "path": "/expense/v1/expensereports", "headers": { "X-com-zoho-expense-organizationid": "10234695", "Authorization": "Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f" } }; const req = http.request(options, function (res) { const chunks = []; res.on("data", function (chunk) { chunks.push(chunk); }); res.on("end", function () { const body = Buffer.concat(chunks); console.log(body.toString()); }); }); req.end();
curl --request GET \ --url https://www.zohoapis.com/expense/v1/expensereports \ --header 'Authorization: Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f' \ --header 'X-com-zoho-expense-organizationid: 10234695'

Response Example

{ "code": 0, "message": "success", "expense_reports": [ { "report_id": "16367000000081005", "report_name": "Trip to SFA", "description": "To client office", "report_number": "ER-00001", "start_date": "2017-02-07", "end_date": "2017-02-18", "status": "submitted", "is_archived": false, "due_date": "2017-03-15", "submitted_date": "2017-02-28", "approved_date": "2017-03-01", "last_submitted_date": "2017-02-28", "currency_id": "16367000000000099", "currency_code": "INR", "approver_id": "16367000000073001", "approver_name": "PATRICIA BOYLE", "approver_email": "patriciab@zillum.com", "submitted_to_id": "16367000000073001", "submitted_to_name": "PATRICIA BOYLE", "submitted_to_email": "patriciab@zillum.com", "submitter_email": "will.smith@gmail.com", "submitted_by": "16367000000073071", "submitter_name": "Will Smith", "total": 70000, "reimbursable_total": 70000, "reimbursement_date": "2017-03-01", "non_reimbursable_total": 0, "created_time": "2017-02-28T18:18:03+0530", "last_modified_time": "2017-02-28T18:31:09+0530", "created_by_id": "16367000000073071", "created_by_name": "Will Smith", "comments_count": 0, "policy_violated": false, "uncategorized_expense_count": 0, "customer_id": "16367000000088005", "custom_fields": [ { "customfield_id": "16367000000277001", "label": "Other Name", "value": "Trip" } ], "project_id": "16367000000223045", "customer_name": "Peter", "project_name": "Brochure Design - Spa", "policy_id": "16367000000092011", "policy_name": "Savings", "due_days": "Due in 15 days" }, {...}, {...} ] }

Delete multiple reports AI Tools

Open in ChatGPT

Open in ChatGPT to ask questions about this page

Open in Claude

Open in Claude to ask questions about this page

Copy as Markdown

Copy this page as markdown to use with AI assistants

View as Markdown

Open this page as markdown in a new tab

Permanently delete multiple reports in a single request by providing the organization ID and report IDs. The reports must typically be in "draft" or "rejected" status to be eligible for deletion - reports that have been submitted, approved, or reimbursed cannot be deleted. This action is irreversible and removes the reports from the system. The expenses associated with the report will be listed as unreported expenses in the Expenses module, available to be added to a new report.
OAuth Scope : ZohoExpense.expensereport.DELETE

Arguments

report_ids
string
(Required)
Comma-separated list of report IDs to delete (max 200).

Headers

X-com-zoho-expense-organizationid
string
(Required)
ID of the organization

Request Example

Click to copy
parameters_data='{"field1":"value1","field2":"value2"}'; headers_data = Map(); headers_data.put("X-com-zoho-expense-organizationid", "10234695"); headers_data.put("Authorization", "Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f"); response = invokeUrl [ url: "https://www.zohoapis.com/expense/v1/expensereports" type: DELETE headers: headers_data content-type: application/json parameters: parameters_data connection: <connection_name> ]; info response;
OkHttpClient client = new OkHttpClient(); MediaType mediaType = MediaType.parse("application/json"); RequestBody body = RequestBody.create(mediaType, "{\"field1\":\"value1\",\"field2\":\"value2\"}"); Request request = new Request.Builder() .url("https://www.zohoapis.com/expense/v1/expensereports") .delete(body) .addHeader("X-com-zoho-expense-organizationid", "10234695") .addHeader("Authorization", "Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f") .addHeader("content-type", "application/json") .build(); Response response = client.newCall(request).execute();
const options = { method: 'DELETE', headers: { 'X-com-zoho-expense-organizationid': '10234695', Authorization: 'Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f', 'content-type': 'application/json' }, body: '{"field1":"value1","field2":"value2"}' }; fetch('https://www.zohoapis.com/expense/v1/expensereports', options) .then(response => response.json()) .then(response => console.log(response)) .catch(err => console.error(err));
import http.client conn = http.client.HTTPSConnection("www.zohoapis.com") payload = "{\"field1\":\"value1\",\"field2\":\"value2\"}" headers = { 'X-com-zoho-expense-organizationid': "10234695", 'Authorization': "Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f", 'content-type': "application/json" } conn.request("DELETE", "/expense/v1/expensereports", payload, headers) res = conn.getresponse() data = res.read() print(data.decode("utf-8"))
const http = require("https"); const options = { "method": "DELETE", "hostname": "www.zohoapis.com", "port": null, "path": "/expense/v1/expensereports", "headers": { "X-com-zoho-expense-organizationid": "10234695", "Authorization": "Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f", "content-type": "application/json" } }; const req = http.request(options, function (res) { const chunks = []; res.on("data", function (chunk) { chunks.push(chunk); }); res.on("end", function () { const body = Buffer.concat(chunks); console.log(body.toString()); }); }); req.write(JSON.stringify({field1: 'value1', field2: 'value2'})); req.end();
curl --request DELETE \ --url https://www.zohoapis.com/expense/v1/expensereports \ --header 'Authorization: Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f' \ --header 'X-com-zoho-expense-organizationid: 10234695' \ --header 'content-type: application/json' \ --data '{"field1":"value1","field2":"value2"}'

Body Parameters

Click to copy
{ "report_ids": "16367000000081005,16367000000081006" }

Response Example

{ "code": 0, "message": "The selected reports have been deleted successfully." }

Update a report AI Tools

Open in ChatGPT

Open in ChatGPT to ask questions about this page

Open in Claude

Open in Claude to ask questions about this page

Copy as Markdown

Copy this page as markdown to use with AI assistants

View as Markdown

Open this page as markdown in a new tab

Update an existing report by providing its report ID and the organization ID. You can optionally update the report name, description, start date, end date, customer or project association, custom field values, and tags. Note that the report must typically be in a draft or recalled state to be editable - reports that have already been submitted or approved cannot be modified without first being recalled.
OAuth Scope : ZohoExpense.expensereport.UPDATE

Arguments

report_name
string
Name of the report.
description
string
Description of the report.
start_date
string
Start date of the report.
end_date
string
End date of the report.
expenses
array
Expenses associated with User.
Show Sub-Attributes arrow
expense_id
string
(Required)
Unique Id of the Expense.
order
integer
Order of the expense in Report.
custom_fields
array
Custom Fields related to Expense.
Show Sub-Attributes arrow
customfield_id
string
(Required)
Unique Id for the Custom Field.
value
string
(Required)
Value of the Custom Field.
customer_id
string
Unique Id for the Customer.
project_id
string
Unique ID for project.
tags
array
Tags associated with the Report.
Show Sub-Attributes arrow
tag_id
string
(Required)
Unique ID for Tag generated by the server.
tag_option_id
string
(Required)
Unique ID for Tag option generated by the server.
expense_id
string
Unique Id of the Expense.
customfield_id
string
Unique Id for the Custom Field.
value
string
Value of the Custom Field.
tag_id
string
Unique ID for Tag generated by the server.
tag_option_id
string
Unique ID for Tag option generated by the server.

Path Parameters

expense_report_id
string
(Required)
Unique identifier of the report.

Headers

X-com-zoho-expense-organizationid
string
(Required)
ID of the organization

Request Example

Click to copy
parameters_data='{"field1":"value1","field2":"value2"}'; headers_data = Map(); headers_data.put("X-com-zoho-expense-organizationid", "10234695"); headers_data.put("Authorization", "Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f"); response = invokeUrl [ url: "https://www.zohoapis.com/expense/v1/expensereports/16367000000081005" type: PUT headers: headers_data content-type: application/json parameters: parameters_data connection: <connection_name> ]; info response;
OkHttpClient client = new OkHttpClient(); MediaType mediaType = MediaType.parse("application/json"); RequestBody body = RequestBody.create(mediaType, "{\"field1\":\"value1\",\"field2\":\"value2\"}"); Request request = new Request.Builder() .url("https://www.zohoapis.com/expense/v1/expensereports/16367000000081005") .put(body) .addHeader("X-com-zoho-expense-organizationid", "10234695") .addHeader("Authorization", "Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f") .addHeader("content-type", "application/json") .build(); Response response = client.newCall(request).execute();
const options = { method: 'PUT', headers: { 'X-com-zoho-expense-organizationid': '10234695', Authorization: 'Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f', 'content-type': 'application/json' }, body: '{"field1":"value1","field2":"value2"}' }; fetch('https://www.zohoapis.com/expense/v1/expensereports/16367000000081005', options) .then(response => response.json()) .then(response => console.log(response)) .catch(err => console.error(err));
import http.client conn = http.client.HTTPSConnection("www.zohoapis.com") payload = "{\"field1\":\"value1\",\"field2\":\"value2\"}" headers = { 'X-com-zoho-expense-organizationid': "10234695", 'Authorization': "Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f", 'content-type': "application/json" } conn.request("PUT", "/expense/v1/expensereports/16367000000081005", payload, headers) res = conn.getresponse() data = res.read() print(data.decode("utf-8"))
const http = require("https"); const options = { "method": "PUT", "hostname": "www.zohoapis.com", "port": null, "path": "/expense/v1/expensereports/16367000000081005", "headers": { "X-com-zoho-expense-organizationid": "10234695", "Authorization": "Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f", "content-type": "application/json" } }; const req = http.request(options, function (res) { const chunks = []; res.on("data", function (chunk) { chunks.push(chunk); }); res.on("end", function () { const body = Buffer.concat(chunks); console.log(body.toString()); }); }); req.write(JSON.stringify({field1: 'value1', field2: 'value2'})); req.end();
curl --request PUT \ --url https://www.zohoapis.com/expense/v1/expensereports/16367000000081005 \ --header 'Authorization: Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f' \ --header 'X-com-zoho-expense-organizationid: 10234695' \ --header 'content-type: application/json' \ --data '{"field1":"value1","field2":"value2"}'

Body Parameters

Click to copy
{ "report_name": "Trip to SFA", "description": "To client office", "start_date": "2017-02-07", "end_date": "2017-02-18", "expenses": [ { "expense_id": "16367000000078079", "order": 0 } ], "custom_fields": [ { "customfield_id": "16367000000277001", "value": "Trip" } ], "customer_id": "16367000000088005", "project_id": "16367000000223045", "tags": [ { "tag_id": "16367000000000301", "tag_option_id": "16367000000225001" } ], "expense_id": "16367000000078079", "customfield_id": "16367000000277001", "value": "Trip", "tag_id": "16367000000000301", "tag_option_id": "16367000000225001" }

Response Example

{ "code": 0, "message": "Expense report details updated successfully.", "expense_report": { "report_id": "16367000000081005", "report_name": "Trip to SFA", "description": "To client office", "report_number": "ER-00001", "start_date": "2017-02-07", "end_date": "2017-02-18", "status": "submitted", "currency_id": "16367000000000099", "price_precision": 2, "currency_code": "INR", "total": 70000, "reimbursable_total": 70000, "non_reimbursable_total": 0, "created_time": "2017-02-28T18:18:03+0530", "created_date": "2017-02-28", "created_by_id": "16367000000073071", "created_by_name": "Will Smith", "created_by_email": "will.smith@gmail.com", "last_modified_time": "2017-02-28T18:31:09+0530", "tags": [ { "tag_id": "16367000000000301", "tag_name": "Tag 1", "tag_option_id": "16367000000225001", "tag_option_name": "Option 1" } ], "expenses": [ { "date": "2017-02-20", "receipt_name": "receipt1.jpg", "tax_amount": 5000, "start_reading": "", "category_name": "Lodging", "line_item_count": 1, "paid_through_account_id": "16367000000036003", "documents": [ { "file_name": "receipt1.jpg", "file_size_formatted": "35.6 KB", "attachment_order": 1, "document_id": "16367000000078085" } ], "project_name": "Brochure Design - Spa", "per_diem_rate": 0, "per_diem_days": 0, "project_id": "16367000000223045", "mileage_rate": 0, "order": 0, "expense_type": "non_mileage", "exchange_rate": 1, "is_inclusive_tax": false, "custom_fields": [ { "customfield_id": "16367000000277001", "label": "Other Name", "value": "Trip" } ], "attendees": "Will Smith", "per_diem_name": "", "merchant_name": "ABS Solutions", "transaction_description": "Has to be done Immediately..", "reference_number": "DD145", "tax_id": "16367000000219093", "is_personal": false, "due_days": "Due in 15 days", "comments_count": 0, "distance": 0, "policy_id": "16367000000092011", "description": "To client office", "merchant_id": "16367000000074027", "currency_code": "INR", "end_reading": "", "bcy_total": 70000, "total": 70000, "category_id": "16367000000033011", "receipt_type": "jpg", "maximum_allowed_amount": 0, "is_uncategorized": false, "is_mandatory_fields_missing": false, "paid_through_account_name": "Employee Reimbursements", "amount": 70000, "payment_mode": "Check", "last_modified_time": "2017-02-28T18:31:09+0530", "per_diem_id": "", "tax_name": "Service", "bcy_tax_amount": 2000, "vehicle_type": "Bike", "is_billable": false, "mileage_unit": "km", "is_expired": false, "receipt_required_amount": 0, "is_reimbursable": true, "expired_by": "", "tax_percentage": 4, "location": "Washington", "customer_name": "Peter", "customer_id": "16367000000088005", "expense_id": "16367000000078079", "currency_id": "16367000000000099" } ], "expired_expense_count": 0, "reimbursable_expenses_count": 1, "non_reimbursable_expenses_count": 0, "custom_fields": [ { "customfield_id": "16367000000277001", "label": "Other Name", "value": "Trip" } ], "customer_id": "16367000000088005", "customer_name": "Peter", "project_id": "16367000000223045", "project_name": "Brochure Design - Spa", "employee_number": "E001", "department_id": "16367000000093001", "department_name": "Finance", "policy_id": "16367000000092011", "policy_name": "Savings" } }

Retrieve details of a report AI Tools

Open in ChatGPT

Open in ChatGPT to ask questions about this page

Open in Claude

Open in Claude to ask questions about this page

Copy as Markdown

Copy this page as markdown to use with AI assistants

View as Markdown

Open this page as markdown in a new tab

Fetch the complete details of a specific report by providing the report ID and the organization ID. The response includes the full report metadata, all associated line-item expenses with their amounts, categories, merchants, receipts, tax details, and mileage information. It also returns the complete approval chain (current, next, and previous approver), any reimbursements already recorded, advance payments applied against the report, unreported expenses available to add, and the list of users involved in the workflow.
OAuth Scope : ZohoExpense.expensereport.READ

Path Parameters

expense_report_id
string
(Required)
Unique identifier of the report.

Query Parameters

print
boolean
When true, returns the report formatted for printing.
group_by
string
Group expense lines in the response (refer to the reportgroupby regex for accepted values).
template_id
string
Use a specific PDF template for rendering the report.
isCallForOEmbed
boolean
Internal flag indicating the request originates from an oEmbed context.
password
string
Password to unlock a password-protected report. Sensitive value - prefer transport via header.

Headers

X-com-zoho-expense-organizationid
string
(Required)
ID of the organization

Request Example

Click to copy
headers_data = Map(); headers_data.put("X-com-zoho-expense-organizationid", "10234695"); headers_data.put("Authorization", "Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f"); response = invokeUrl [ url: "https://www.zohoapis.com/expense/v1/expensereports/16367000000081005" type: GET headers: headers_data connection: <connection_name> ]; info response;
OkHttpClient client = new OkHttpClient(); Request request = new Request.Builder() .url("https://www.zohoapis.com/expense/v1/expensereports/16367000000081005") .get() .addHeader("X-com-zoho-expense-organizationid", "10234695") .addHeader("Authorization", "Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f") .build(); Response response = client.newCall(request).execute();
const options = { method: 'GET', headers: { 'X-com-zoho-expense-organizationid': '10234695', Authorization: 'Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f' } }; fetch('https://www.zohoapis.com/expense/v1/expensereports/16367000000081005', options) .then(response => response.json()) .then(response => console.log(response)) .catch(err => console.error(err));
import http.client conn = http.client.HTTPSConnection("www.zohoapis.com") headers = { 'X-com-zoho-expense-organizationid': "10234695", 'Authorization': "Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f" } conn.request("GET", "/expense/v1/expensereports/16367000000081005", headers=headers) res = conn.getresponse() data = res.read() print(data.decode("utf-8"))
const http = require("https"); const options = { "method": "GET", "hostname": "www.zohoapis.com", "port": null, "path": "/expense/v1/expensereports/16367000000081005", "headers": { "X-com-zoho-expense-organizationid": "10234695", "Authorization": "Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f" } }; const req = http.request(options, function (res) { const chunks = []; res.on("data", function (chunk) { chunks.push(chunk); }); res.on("end", function () { const body = Buffer.concat(chunks); console.log(body.toString()); }); }); req.end();
curl --request GET \ --url https://www.zohoapis.com/expense/v1/expensereports/16367000000081005 \ --header 'Authorization: Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f' \ --header 'X-com-zoho-expense-organizationid: 10234695'

Response Example

{ "code": 0, "message": "success", "expense_report": { "report_id": "16367000000081005", "report_name": "Trip to SFA", "description": "To client office", "report_number": "ER-00001", "start_date": "2017-02-07", "end_date": "2017-02-18", "due_date": "2017-03-15", "status": "submitted", "is_archived": false, "due_days": "Due in 15 days", "submitted_date": "2017-02-28", "last_submitted_date": "2017-02-28", "currency_id": "16367000000000099", "price_precision": 2, "currency_code": "INR", "approver_id": "16367000000073001", "approver_name": "PATRICIA BOYLE", "approver_email": "patriciab@zillum.com", "approver_photo_url": "https://contacts.zoho.com/file?ID=16b87b9dbae5b1008b32c9736141b6f63b3864c8cf94d900cf9bb346f0eb97b105c58df21a12283d421fa80a6cb97ffca294a909bc0c7ae9f1e14dd2e499565d&fs=thumb", "submitted_to_id": "16367000000073001", "submitted_to_name": "PATRICIA BOYLE", "submitted_to_email": "patriciab@zillum.com", "submitted_to_employee_no": "E001", "submitted_to_department_name": "Finance", "submitted_to_photo_url": "https://contacts.zoho.com/file?ID=16b87b9dbae5b1008b32c9736141b6f63b3864c8cf94d900cf9bb346f0eb97b105c58df21a12283d421fa80a6cb97ffca294a909bc0c7ae9f1e14dd2e499565d&fs=thumb", "submitted_by": "16367000000073071", "submitter_name": "Will Smith", "submitter_email": "will.smith@gmail.com", "submitter_photo_url": "https://contacts.zoho.com/file?ID=16b87b9dbae5b1008b32c9736141b6f63b3864c8cf94d900cf9bb346f0eb97b105c58df21a12283d421fa80a6cb97ffca294a909bc0c7ae9f1e14dd2e499565d&fs=thumb", "submitter_employee_no": "E002", "submitter_department_name": "Maintenance", "total": 70000, "reimbursable_total": 70000, "non_reimbursable_total": 0, "created_time": "2017-02-28T18:18:03+0530", "created_date": "2017-02-28", "last_modified_time": "2017-02-28T18:31:09+0530", "created_by_id": "16367000000073071", "created_by_name": "Will Smith", "created_by_email": "will.smith@gmail.com", "creator_photo_url": "https://contacts.zoho.com/file?ID=16b87b9dbae5b1008b32c9736141b6f63b3864c8cf94d900cf9bb346f0eb97b105c58df21a12283d421fa80a6cb97ffca294a909bc0c7ae9f1e14dd2e499565d&fs=thumb", "tags": [ { "tag_id": "16367000000000301", "tag_name": "Tag 1", "tag_option_id": "16367000000225001", "tag_option_name": "Option 1" } ], "expenses": [ { "date": "2017-02-20", "receipt_name": "receipt1.jpg", "tax_amount": 5000, "start_reading": "", "category_name": "Lodging", "line_item_count": 1, "paid_through_account_id": "16367000000036003", "documents": [ { "file_name": "receipt1.jpg", "file_size_formatted": "35.6 KB", "attachment_order": 1, "document_id": "16367000000078085" } ], "project_name": "Brochure Design - Spa", "per_diem_rate": 0, "per_diem_days": 0, "project_id": "16367000000223045", "mileage_rate": 0, "order": 0, "expense_type": "non_mileage", "exchange_rate": 1, "is_inclusive_tax": false, "custom_fields": [ { "customfield_id": "16367000000277001", "label": "Other Name", "value": "Trip" } ], "attendees": "Will Smith", "per_diem_name": "", "merchant_name": "ABS Solutions", "transaction_description": "Has to be done Immediately..", "reference_number": "DD145", "tax_id": "16367000000219093", "is_personal": false, "due_days": "Due in 15 days", "comments_count": 0, "distance": 0, "policy_id": "16367000000092011", "description": "To client office", "merchant_id": "16367000000074027", "currency_code": "INR", "end_reading": "", "bcy_total": 70000, "total": 70000, "category_id": "16367000000033011", "receipt_type": "jpg", "maximum_allowed_amount": 0, "is_uncategorized": false, "is_mandatory_fields_missing": false, "paid_through_account_name": "Employee Reimbursements", "amount": 70000, "payment_mode": "Check", "last_modified_time": "2017-02-28T18:31:09+0530", "per_diem_id": "", "tax_name": "Service", "bcy_tax_amount": 2000, "vehicle_type": "Bike", "is_billable": false, "mileage_unit": "km", "is_expired": false, "receipt_required_amount": 0, "is_reimbursable": true, "expired_by": "", "tax_percentage": 4, "location": "Washington", "customer_name": "Peter", "customer_id": "16367000000088005", "expense_id": "16367000000078079", "currency_id": "16367000000000099" } ], "expired_expense_count": 0, "reimbursable_expenses_count": 1, "non_reimbursable_expenses_count": 0, "custom_fields": [ { "customfield_id": "16367000000277001", "label": "Other Name", "value": "Trip" } ], "uncategorized_expense_count": 0, "policy_violated": false, "reimbursements": [ { "employee_reimbursement_id": "16367000000101099", "date": "2017-02-20", "amount": 70000, "entity_type": 62, "bcy_amount": 70000, "notes": "Finish", "currency_code": "INR", "currency_id": "16367000000000099" } ], "advance_payments": [ { "date": "2017-02-20", "advance_payment_id": "16367000000243203", "reimbursement_entity_id": "", "currency_id": "16367000000000099", "currency_code": "INR", "exchange_rate": 1, "amount": 70000, "bcy_amount": 70000, "excess_amount": 0, "excess_bcy_amount": 0, "applied_amount": 70000, "applied_bcy_amount": 70000, "excess_applied_amount": 0, "excess_applied_bcy_amount": 0, "excess_unapplied_amount": 0, "excess_unapplied_bcy_amount": 0, "price_precision": 2 } ], "is_advancepayment_allowed": true, "amount_to_be_reimbursed": 70000, "remaining_reimbursement_total": 0, "amount_to_be_refunded": 0, "advance_total": 70000, "can_create_advance": true, "customer_id": "16367000000088005", "customer_name": "Peter", "project_id": "16367000000223045", "project_name": "Brochure Design - Spa", "employee_number": "E001", "department_id": "16367000000093001", "department_name": "Finance", "next_approver_id": "16367000000073001", "next_approver_email": "patriciab@zillum.com", "next_approver_name": "PATRICIA BOYLE", "approver_employee_no": "E001", "approver_department_name": "Finance", "previous_approver_id": "", "previous_approver_name": "", "previous_approver_employee_no": "", "previous_approver_department_name": "", "policy_id": "16367000000092011", "policy_name": "Savings", "unreported_expenses_count": 1, "unreported_expenses": [ { "expense_id": "16367000000078079", "date": "2017-02-20", "category_id": "16367000000033011", "category_name": "Lodging", "total": 70000, "paid_through_account_id": "16367000000036003", "paid_through_account_name": "Employee Reimbursements", "bcy_total": 70000, "currency_code": "INR", "currency_id": "16367000000000099", "receipt_name": "receipt1.jpg", "is_billable": false, "customer_id": "16367000000088005", "customer_name": "Peter", "project_id": "16367000000223045", "project_name": "Brochure Design - Spa", "is_reimbursable": true, "merchant_id": "16367000000074027", "merchant_name": "ABS Solutions", "distance": 0, "mileage_rate": 0, "mileage_unit": "km", "mileage_type": "non_mileage", "start_reading": "", "end_reading": "", "receipt_type": "jpg", "documents": [ { "file_name": "receipt1.jpg", "file_size_formatted": "35.6 KB", "attachment_order": 1, "document_id": "16367000000078085" } ], "exchange_rate": 1, "is_uncategorized": false, "due_days": "Due in 15 days", "expired_by": "", "is_expired": false, "payment_mode": "Check", "transaction_description": "Has to be done Immediately.." } ], "users": [ { "user_id": "16367000000073001", "role_id": "16367000000030001", "name": "Will Smith", "email": "will.smith@gmail.com", "default_approver_id": "16367000000030001", "default_approver_name": "PATRICIA BOYLE", "user_role": "admin", "can_approve": true, "is_current_user": true, "email_ids": [ { "is_selected": true, "email": "will.smith@gmail.com" } ], "status": "submitted", "photo_url": "https://contacts.zoho.com/file?ID=16b87b9dbae5b1008b32c9736141b6f63b3864c8cf94d900cf9bb346f0eb97b105c58df21a12283d421fa80a6cb97ffca294a909bc0c7ae9f1e14dd2e499565d&fs=thumb", "approves_to_id": "16367000000030001", "approves_to_name": "PATRICIA BOYLE", "submission_amount_limit": 0, "approval_amount_limit": 0, "created_time": "2017-02-28T18:18:03+0530", "last_modified_time": "2017-02-28T18:31:09+0530", "policy_id": "16367000000092011", "policy_name": "Savings" } ] } }

Delete a report AI Tools

Open in ChatGPT

Open in ChatGPT to ask questions about this page

Open in Claude

Open in Claude to ask questions about this page

Copy as Markdown

Copy this page as markdown to use with AI assistants

View as Markdown

Open this page as markdown in a new tab

Permanently delete a report by providing the organization ID and report ID. The report must typically be in "draft" or "rejected" status to be eligible for deletion - reports that have been submitted, approved, or reimbursed cannot be deleted. This action is irreversible and removes the report from the system. The expenses associated with the report will be listed as unreported expenses in the Expenses module, available to be added to a new report.
OAuth Scope : ZohoExpense.expensereport.DELETE

Path Parameters

expense_report_id
string
(Required)
Unique identifier of the report.

Headers

X-com-zoho-expense-organizationid
string
(Required)
ID of the organization

Request Example

Click to copy
headers_data = Map(); headers_data.put("X-com-zoho-expense-organizationid", "10234695"); headers_data.put("Authorization", "Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f"); response = invokeUrl [ url: "https://www.zohoapis.com/expense/v1/expensereports/16367000000081005" type: DELETE headers: headers_data connection: <connection_name> ]; info response;
OkHttpClient client = new OkHttpClient(); Request request = new Request.Builder() .url("https://www.zohoapis.com/expense/v1/expensereports/16367000000081005") .delete(null) .addHeader("X-com-zoho-expense-organizationid", "10234695") .addHeader("Authorization", "Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f") .build(); Response response = client.newCall(request).execute();
const options = { method: 'DELETE', headers: { 'X-com-zoho-expense-organizationid': '10234695', Authorization: 'Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f' } }; fetch('https://www.zohoapis.com/expense/v1/expensereports/16367000000081005', options) .then(response => response.json()) .then(response => console.log(response)) .catch(err => console.error(err));
import http.client conn = http.client.HTTPSConnection("www.zohoapis.com") headers = { 'X-com-zoho-expense-organizationid': "10234695", 'Authorization': "Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f" } conn.request("DELETE", "/expense/v1/expensereports/16367000000081005", headers=headers) res = conn.getresponse() data = res.read() print(data.decode("utf-8"))
const http = require("https"); const options = { "method": "DELETE", "hostname": "www.zohoapis.com", "port": null, "path": "/expense/v1/expensereports/16367000000081005", "headers": { "X-com-zoho-expense-organizationid": "10234695", "Authorization": "Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f" } }; const req = http.request(options, function (res) { const chunks = []; res.on("data", function (chunk) { chunks.push(chunk); }); res.on("end", function () { const body = Buffer.concat(chunks); console.log(body.toString()); }); }); req.end();
curl --request DELETE \ --url https://www.zohoapis.com/expense/v1/expensereports/16367000000081005 \ --header 'Authorization: Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f' \ --header 'X-com-zoho-expense-organizationid: 10234695'

Response Example

{ "code": 0, "message": "Expense report has been deleted successfully." }

Submit a report AI Tools

Open in ChatGPT

Open in ChatGPT to ask questions about this page

Open in Claude

Open in Claude to ask questions about this page

Copy as Markdown

Copy this page as markdown to use with AI assistants

View as Markdown

Open this page as markdown in a new tab

Submit a draft or recalled report for approval by providing the report ID and the organization ID. The user must select an approver to whom the report will be submitted and can specify email addresses of recipients to be CCed on submission. The report must be in "draft" or "recalled" status, should have at least one expense attached before submission can succeed.
OAuth Scope : ZohoExpense.expensereport.UPDATE

Arguments

approver_id
string
Unique ID for the current approver.
cc_mail_ids
array
Array of email address of the recipients to be cced

Path Parameters

expense_report_id
string
(Required)
Unique identifier of the report.

Headers

X-com-zoho-expense-organizationid
string
(Required)
ID of the organization

Request Example

Click to copy
parameters_data='{"field1":"value1","field2":"value2"}'; headers_data = Map(); headers_data.put("X-com-zoho-expense-organizationid", "10234695"); headers_data.put("Authorization", "Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f"); response = invokeUrl [ url: "https://www.zohoapis.com/expense/v1/expensereports/16367000000081005/submit" type: POST headers: headers_data content-type: application/json parameters: parameters_data connection: <connection_name> ]; info response;
OkHttpClient client = new OkHttpClient(); MediaType mediaType = MediaType.parse("application/json"); RequestBody body = RequestBody.create(mediaType, "{\"field1\":\"value1\",\"field2\":\"value2\"}"); Request request = new Request.Builder() .url("https://www.zohoapis.com/expense/v1/expensereports/16367000000081005/submit") .post(body) .addHeader("X-com-zoho-expense-organizationid", "10234695") .addHeader("Authorization", "Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f") .addHeader("content-type", "application/json") .build(); Response response = client.newCall(request).execute();
const options = { method: 'POST', headers: { 'X-com-zoho-expense-organizationid': '10234695', Authorization: 'Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f', 'content-type': 'application/json' }, body: '{"field1":"value1","field2":"value2"}' }; fetch('https://www.zohoapis.com/expense/v1/expensereports/16367000000081005/submit', options) .then(response => response.json()) .then(response => console.log(response)) .catch(err => console.error(err));
import http.client conn = http.client.HTTPSConnection("www.zohoapis.com") payload = "{\"field1\":\"value1\",\"field2\":\"value2\"}" headers = { 'X-com-zoho-expense-organizationid': "10234695", 'Authorization': "Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f", 'content-type': "application/json" } conn.request("POST", "/expense/v1/expensereports/16367000000081005/submit", payload, headers) res = conn.getresponse() data = res.read() print(data.decode("utf-8"))
const http = require("https"); const options = { "method": "POST", "hostname": "www.zohoapis.com", "port": null, "path": "/expense/v1/expensereports/16367000000081005/submit", "headers": { "X-com-zoho-expense-organizationid": "10234695", "Authorization": "Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f", "content-type": "application/json" } }; const req = http.request(options, function (res) { const chunks = []; res.on("data", function (chunk) { chunks.push(chunk); }); res.on("end", function () { const body = Buffer.concat(chunks); console.log(body.toString()); }); }); req.write(JSON.stringify({field1: 'value1', field2: 'value2'})); req.end();
curl --request POST \ --url https://www.zohoapis.com/expense/v1/expensereports/16367000000081005/submit \ --header 'Authorization: Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f' \ --header 'X-com-zoho-expense-organizationid: 10234695' \ --header 'content-type: application/json' \ --data '{"field1":"value1","field2":"value2"}'

Body Parameters

Click to copy
{ "approver_id": "16367000000073001", "cc_mail_ids": [ "will.smith@gmail.com" ] }

Response Example

{ "code": 0, "message": "Report submitted for approval successfully." }

Approve a report AI Tools

Open in ChatGPT

Open in ChatGPT to ask questions about this page

Open in Claude

Open in Claude to ask questions about this page

Copy as Markdown

Copy this page as markdown to use with AI assistants

View as Markdown

Open this page as markdown in a new tab

Approve a submitted report by providing the report ID and the organization ID. The report must currently be in "submitted" status, and the user must be an authorized approver in the report's approval workflow. Upon success, the report's status transitions to "approved" and the submitter is notified.
OAuth Scope : ZohoExpense.approval.CREATE

Path Parameters

expense_report_id
string
(Required)
Unique identifier of the report.

Headers

X-com-zoho-expense-organizationid
string
(Required)
ID of the organization

Request Example

Click to copy
headers_data = Map(); headers_data.put("X-com-zoho-expense-organizationid", "10234695"); headers_data.put("Authorization", "Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f"); response = invokeUrl [ url: "https://www.zohoapis.com/expense/v1/expensereports/16367000000081005/approve" type: POST headers: headers_data connection: <connection_name> ]; info response;
OkHttpClient client = new OkHttpClient(); Request request = new Request.Builder() .url("https://www.zohoapis.com/expense/v1/expensereports/16367000000081005/approve") .post(null) .addHeader("X-com-zoho-expense-organizationid", "10234695") .addHeader("Authorization", "Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f") .build(); Response response = client.newCall(request).execute();
const options = { method: 'POST', headers: { 'X-com-zoho-expense-organizationid': '10234695', Authorization: 'Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f' } }; fetch('https://www.zohoapis.com/expense/v1/expensereports/16367000000081005/approve', options) .then(response => response.json()) .then(response => console.log(response)) .catch(err => console.error(err));
import http.client conn = http.client.HTTPSConnection("www.zohoapis.com") headers = { 'X-com-zoho-expense-organizationid': "10234695", 'Authorization': "Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f" } conn.request("POST", "/expense/v1/expensereports/16367000000081005/approve", headers=headers) res = conn.getresponse() data = res.read() print(data.decode("utf-8"))
const http = require("https"); const options = { "method": "POST", "hostname": "www.zohoapis.com", "port": null, "path": "/expense/v1/expensereports/16367000000081005/approve", "headers": { "X-com-zoho-expense-organizationid": "10234695", "Authorization": "Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f" } }; const req = http.request(options, function (res) { const chunks = []; res.on("data", function (chunk) { chunks.push(chunk); }); res.on("end", function () { const body = Buffer.concat(chunks); console.log(body.toString()); }); }); req.end();
curl --request POST \ --url https://www.zohoapis.com/expense/v1/expensereports/16367000000081005/approve \ --header 'Authorization: Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f' \ --header 'X-com-zoho-expense-organizationid: 10234695'

Response Example

{ "code": 0, "message": "Report approved successfully" }

Reject a report AI Tools

Open in ChatGPT

Open in ChatGPT to ask questions about this page

Open in Claude

Open in Claude to ask questions about this page

Copy as Markdown

Copy this page as markdown to use with AI assistants

View as Markdown

Open this page as markdown in a new tab

Reject a submitted report by providing the report ID and the organization ID. You can optionally include a comments field in the request body explaining the reason for rejection (e.g., "Purpose is not valid."). The report must be in "submitted" status and the user must be an authorized approver. Once rejected, the report is sent back to the submitter who can then revise and resubmit it.
OAuth Scope : ZohoExpense.approval.CREATE

Arguments

comments
string
Comments on the report.

Path Parameters

expense_report_id
string
(Required)
Unique identifier of the report.

Headers

X-com-zoho-expense-organizationid
string
(Required)
ID of the organization

Request Example

Click to copy
parameters_data='{"field1":"value1","field2":"value2"}'; headers_data = Map(); headers_data.put("X-com-zoho-expense-organizationid", "10234695"); headers_data.put("Authorization", "Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f"); response = invokeUrl [ url: "https://www.zohoapis.com/expense/v1/expensereports/16367000000081005/reject" type: POST headers: headers_data content-type: application/json parameters: parameters_data connection: <connection_name> ]; info response;
OkHttpClient client = new OkHttpClient(); MediaType mediaType = MediaType.parse("application/json"); RequestBody body = RequestBody.create(mediaType, "{\"field1\":\"value1\",\"field2\":\"value2\"}"); Request request = new Request.Builder() .url("https://www.zohoapis.com/expense/v1/expensereports/16367000000081005/reject") .post(body) .addHeader("X-com-zoho-expense-organizationid", "10234695") .addHeader("Authorization", "Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f") .addHeader("content-type", "application/json") .build(); Response response = client.newCall(request).execute();
const options = { method: 'POST', headers: { 'X-com-zoho-expense-organizationid': '10234695', Authorization: 'Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f', 'content-type': 'application/json' }, body: '{"field1":"value1","field2":"value2"}' }; fetch('https://www.zohoapis.com/expense/v1/expensereports/16367000000081005/reject', options) .then(response => response.json()) .then(response => console.log(response)) .catch(err => console.error(err));
import http.client conn = http.client.HTTPSConnection("www.zohoapis.com") payload = "{\"field1\":\"value1\",\"field2\":\"value2\"}" headers = { 'X-com-zoho-expense-organizationid': "10234695", 'Authorization': "Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f", 'content-type': "application/json" } conn.request("POST", "/expense/v1/expensereports/16367000000081005/reject", payload, headers) res = conn.getresponse() data = res.read() print(data.decode("utf-8"))
const http = require("https"); const options = { "method": "POST", "hostname": "www.zohoapis.com", "port": null, "path": "/expense/v1/expensereports/16367000000081005/reject", "headers": { "X-com-zoho-expense-organizationid": "10234695", "Authorization": "Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f", "content-type": "application/json" } }; const req = http.request(options, function (res) { const chunks = []; res.on("data", function (chunk) { chunks.push(chunk); }); res.on("end", function () { const body = Buffer.concat(chunks); console.log(body.toString()); }); }); req.write(JSON.stringify({field1: 'value1', field2: 'value2'})); req.end();
curl --request POST \ --url https://www.zohoapis.com/expense/v1/expensereports/16367000000081005/reject \ --header 'Authorization: Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f' \ --header 'X-com-zoho-expense-organizationid: 10234695' \ --header 'content-type: application/json' \ --data '{"field1":"value1","field2":"value2"}'

Body Parameters

Click to copy
{ "comments": "Purpose is not valid." }

Response Example

{ "code": 0, "message": "Report has been rejected" }

Reimburse a report AI Tools

Open in ChatGPT

Open in ChatGPT to ask questions about this page

Open in Claude

Open in Claude to ask questions about this page

Copy as Markdown

Copy this page as markdown to use with AI assistants

View as Markdown

Open this page as markdown in a new tab

Record a reimbursement against an approved report by providing the report ID and the organization ID. The report must be in "approved" status and the authenticated user must have reimbursement permissions within the organization. The reimbursement can be recorded offline or paid online. For an offline (manual) reimbursement, account_id - the paid-through account from which the amount is paid - is mandatory; amount (defaults to the report's reimbursable amount), date, reference_number, currency_id, exchange_rate and notes are optional. For an online reimbursement, a payment gateway must be configured for the organization and both account_id (the source account linked to the gateway) and bank_account_id (the employee's bank account to be paid) are mandatory, with the payment authorized using payment_token, or otp together with otp_id.
OAuth Scope : ZohoExpense.reimbursement.CREATE

Arguments

notes
string
Notes on Reimbursement.
date
string
Date of Expense.
amount
double
Total Amount.
reference_number
string
Reference Number
currency_id
string
Unique ID for currency.

Path Parameters

expense_report_id
string
(Required)
Unique identifier of the report.

Headers

X-com-zoho-expense-organizationid
string
(Required)
ID of the organization

Request Example

Click to copy
parameters_data='{"field1":"value1","field2":"value2"}'; headers_data = Map(); headers_data.put("X-com-zoho-expense-organizationid", "10234695"); headers_data.put("Authorization", "Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f"); response = invokeUrl [ url: "https://www.zohoapis.com/expense/v1/expensereports/16367000000081005/reimburse" type: POST headers: headers_data content-type: application/json parameters: parameters_data connection: <connection_name> ]; info response;
OkHttpClient client = new OkHttpClient(); MediaType mediaType = MediaType.parse("application/json"); RequestBody body = RequestBody.create(mediaType, "{\"field1\":\"value1\",\"field2\":\"value2\"}"); Request request = new Request.Builder() .url("https://www.zohoapis.com/expense/v1/expensereports/16367000000081005/reimburse") .post(body) .addHeader("X-com-zoho-expense-organizationid", "10234695") .addHeader("Authorization", "Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f") .addHeader("content-type", "application/json") .build(); Response response = client.newCall(request).execute();
const options = { method: 'POST', headers: { 'X-com-zoho-expense-organizationid': '10234695', Authorization: 'Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f', 'content-type': 'application/json' }, body: '{"field1":"value1","field2":"value2"}' }; fetch('https://www.zohoapis.com/expense/v1/expensereports/16367000000081005/reimburse', options) .then(response => response.json()) .then(response => console.log(response)) .catch(err => console.error(err));
import http.client conn = http.client.HTTPSConnection("www.zohoapis.com") payload = "{\"field1\":\"value1\",\"field2\":\"value2\"}" headers = { 'X-com-zoho-expense-organizationid': "10234695", 'Authorization': "Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f", 'content-type': "application/json" } conn.request("POST", "/expense/v1/expensereports/16367000000081005/reimburse", payload, headers) res = conn.getresponse() data = res.read() print(data.decode("utf-8"))
const http = require("https"); const options = { "method": "POST", "hostname": "www.zohoapis.com", "port": null, "path": "/expense/v1/expensereports/16367000000081005/reimburse", "headers": { "X-com-zoho-expense-organizationid": "10234695", "Authorization": "Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f", "content-type": "application/json" } }; const req = http.request(options, function (res) { const chunks = []; res.on("data", function (chunk) { chunks.push(chunk); }); res.on("end", function () { const body = Buffer.concat(chunks); console.log(body.toString()); }); }); req.write(JSON.stringify({field1: 'value1', field2: 'value2'})); req.end();
curl --request POST \ --url https://www.zohoapis.com/expense/v1/expensereports/16367000000081005/reimburse \ --header 'Authorization: Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f' \ --header 'X-com-zoho-expense-organizationid: 10234695' \ --header 'content-type: application/json' \ --data '{"field1":"value1","field2":"value2"}'

Body Parameters

Click to copy
{ "notes": "Finish", "date": "2017-02-20", "amount": 70000, "reference_number": "DD145", "currency_id": "16367000000000099" }

Response Example

{ "code": 0, "message": "Report has been reimbursed", "expense_report_reimbursed": { "report_id": "16367000000081005", "report_name": "Trip to SFA", "description": "To client office", "report_number": "ER-00001", "start_date": "2017-02-07", "end_date": "2017-02-18", "due_date": "2017-03-15", "status": "submitted", "is_archived": false, "due_days": "Due in 15 days", "submitted_date": "2017-02-28", "last_submitted_date": "2017-02-28", "currency_id": "16367000000000099", "price_precision": 2, "currency_code": "INR", "approver_id": "16367000000073001", "approver_name": "PATRICIA BOYLE", "approver_email": "patriciab@zillum.com", "approver_photo_url": "https://contacts.zoho.com/file?ID=16b87b9dbae5b1008b32c9736141b6f63b3864c8cf94d900cf9bb346f0eb97b105c58df21a12283d421fa80a6cb97ffca294a909bc0c7ae9f1e14dd2e499565d&fs=thumb", "submitted_to_id": "16367000000073001", "submitted_to_name": "PATRICIA BOYLE", "submitted_to_email": "patriciab@zillum.com", "submitted_to_employee_no": "E001", "submitted_to_department_name": "Finance", "submitted_to_photo_url": "https://contacts.zoho.com/file?ID=16b87b9dbae5b1008b32c9736141b6f63b3864c8cf94d900cf9bb346f0eb97b105c58df21a12283d421fa80a6cb97ffca294a909bc0c7ae9f1e14dd2e499565d&fs=thumb", "submitted_by": "16367000000073071", "submitter_name": "Will Smith", "submitter_email": "will.smith@gmail.com", "submitter_photo_url": "https://contacts.zoho.com/file?ID=16b87b9dbae5b1008b32c9736141b6f63b3864c8cf94d900cf9bb346f0eb97b105c58df21a12283d421fa80a6cb97ffca294a909bc0c7ae9f1e14dd2e499565d&fs=thumb", "submitter_employee_no": "E002", "submitter_department_name": "Maintenance", "total": 70000, "reimbursable_total": 70000, "non_reimbursable_total": 0, "created_time": "2017-02-28T18:18:03+0530", "created_date": "2017-02-28", "last_modified_time": "2017-02-28T18:31:09+0530", "created_by_id": "16367000000073071", "created_by_name": "Will Smith", "created_by_email": "will.smith@gmail.com", "creator_photo_url": "https://contacts.zoho.com/file?ID=16b87b9dbae5b1008b32c9736141b6f63b3864c8cf94d900cf9bb346f0eb97b105c58df21a12283d421fa80a6cb97ffca294a909bc0c7ae9f1e14dd2e499565d&fs=thumb", "expenses": [ { "date": "2017-02-20", "receipt_name": "receipt1.jpg", "tax_amount": 5000, "start_reading": "", "category_name": "Lodging", "line_item_count": 1, "paid_through_account_id": "16367000000036003", "documents": [ { "file_name": "receipt1.jpg", "file_size_formatted": "35.6 KB", "attachment_order": 1, "document_id": "16367000000078085" } ], "project_name": "Brochure Design - Spa", "per_diem_rate": 0, "per_diem_days": 0, "project_id": "16367000000223045", "mileage_rate": 0, "order": 0, "expense_type": "non_mileage", "exchange_rate": 1, "is_inclusive_tax": false, "custom_fields": [ { "customfield_id": "16367000000277001", "label": "Other Name", "value": "Trip" } ], "attendees": "Will Smith", "per_diem_name": "", "merchant_name": "ABS Solutions", "transaction_description": "Has to be done Immediately..", "reference_number": "DD145", "tax_id": "16367000000219093", "is_personal": false, "due_days": "Due in 15 days", "comments_count": 0, "distance": 0, "policy_id": "16367000000092011", "description": "To client office", "merchant_id": "16367000000074027", "currency_code": "INR", "end_reading": "", "bcy_total": 70000, "total": 70000, "category_id": "16367000000033011", "receipt_type": "jpg", "maximum_allowed_amount": 0, "is_uncategorized": false, "is_mandatory_fields_missing": false, "paid_through_account_name": "Employee Reimbursements", "amount": 70000, "payment_mode": "Check", "last_modified_time": "2017-02-28T18:31:09+0530", "per_diem_id": "", "tax_name": "Service", "bcy_tax_amount": 2000, "vehicle_type": "Bike", "is_billable": false, "mileage_unit": "km", "is_expired": false, "receipt_required_amount": 0, "is_reimbursable": true, "expired_by": "", "tax_percentage": 4, "location": "Washington", "customer_name": "Peter", "customer_id": "16367000000088005", "expense_id": "16367000000078079", "currency_id": "16367000000000099" } ], "expired_expense_count": 0, "reimbursable_expenses_count": 1, "non_reimbursable_expenses_count": 0, "custom_fields": [ { "customfield_id": "16367000000277001", "label": "Other Name", "value": "Trip" } ], "uncategorized_expense_count": 0, "policy_violated": false, "reimbursements": [ { "employee_reimbursement_id": "16367000000101099", "date": "2017-02-20", "amount": 70000, "entity_type": 62, "bcy_amount": 70000, "notes": "Finish", "currency_code": "INR", "currency_id": "16367000000000099" } ], "advance_payments": [ { "date": "2017-02-20", "advance_payment_id": "16367000000243203", "reimbursement_entity_id": "", "currency_id": "16367000000000099", "currency_code": "INR", "exchange_rate": 1, "amount": 70000, "bcy_amount": 70000, "excess_amount": 0, "excess_bcy_amount": 0, "applied_amount": 70000, "applied_bcy_amount": 70000, "excess_applied_amount": 0, "excess_applied_bcy_amount": 0, "excess_unapplied_amount": 0, "excess_unapplied_bcy_amount": 0, "price_precision": 2 } ], "is_advancepayment_allowed": true, "amount_to_be_reimbursed": 70000, "remaining_reimbursement_total": 0, "amount_to_be_refunded": 0, "advance_total": 70000, "can_create_advance": true, "customer_id": "16367000000088005", "customer_name": "Peter", "project_id": "16367000000223045", "project_name": "Brochure Design - Spa", "employee_number": "E001", "department_id": "16367000000093001", "department_name": "Finance", "next_approver_id": "16367000000073001", "next_approver_email": "patriciab@zillum.com", "next_approver_name": "PATRICIA BOYLE", "approver_employee_no": "E001", "approver_department_name": "Finance", "previous_approver_id": "", "previous_approver_name": "", "previous_approver_employee_no": "", "previous_approver_department_name": "", "policy_id": "16367000000092011", "policy_name": "Savings" } }

Approval history of a report AI Tools

Open in ChatGPT

Open in ChatGPT to ask questions about this page

Open in Claude

Open in Claude to ask questions about this page

Copy as Markdown

Copy this page as markdown to use with AI assistants

View as Markdown

Open this page as markdown in a new tab

Retrieve the complete approval audit trail for a specific report by providing the report ID and the organization ID. The response returns a chronological list of all approval actions taken on the report, including each entry's status transition (previous status to new status), the approver's name and email, any comments left during approval or rejection, and the date and time of each action.
OAuth Scope : ZohoExpense.expensereport.READ

Path Parameters

expense_report_id
string
(Required)
Unique identifier of the report.

Query Parameters

show_resolved_duplicates
boolean
When true, includes duplicate-detection audit entries that were later resolved.
show_policy_info
boolean
When true, includes policy violation details for each history entry.
group_by
string
Group history rows in the response (refer to the groupbyregex regex for accepted values).
show_bank_account_details
boolean
When true, includes bank account details for reimbursement events.

Headers

X-com-zoho-expense-organizationid
string
(Required)
ID of the organization

Request Example

Click to copy
headers_data = Map(); headers_data.put("X-com-zoho-expense-organizationid", "10234695"); headers_data.put("Authorization", "Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f"); response = invokeUrl [ url: "https://www.zohoapis.com/expense/v1/expensereports/16367000000081005/approvalhistory" type: GET headers: headers_data connection: <connection_name> ]; info response;
OkHttpClient client = new OkHttpClient(); Request request = new Request.Builder() .url("https://www.zohoapis.com/expense/v1/expensereports/16367000000081005/approvalhistory") .get() .addHeader("X-com-zoho-expense-organizationid", "10234695") .addHeader("Authorization", "Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f") .build(); Response response = client.newCall(request).execute();
const options = { method: 'GET', headers: { 'X-com-zoho-expense-organizationid': '10234695', Authorization: 'Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f' } }; fetch('https://www.zohoapis.com/expense/v1/expensereports/16367000000081005/approvalhistory', options) .then(response => response.json()) .then(response => console.log(response)) .catch(err => console.error(err));
import http.client conn = http.client.HTTPSConnection("www.zohoapis.com") headers = { 'X-com-zoho-expense-organizationid': "10234695", 'Authorization': "Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f" } conn.request("GET", "/expense/v1/expensereports/16367000000081005/approvalhistory", headers=headers) res = conn.getresponse() data = res.read() print(data.decode("utf-8"))
const http = require("https"); const options = { "method": "GET", "hostname": "www.zohoapis.com", "port": null, "path": "/expense/v1/expensereports/16367000000081005/approvalhistory", "headers": { "X-com-zoho-expense-organizationid": "10234695", "Authorization": "Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f" } }; const req = http.request(options, function (res) { const chunks = []; res.on("data", function (chunk) { chunks.push(chunk); }); res.on("end", function () { const body = Buffer.concat(chunks); console.log(body.toString()); }); }); req.end();
curl --request GET \ --url https://www.zohoapis.com/expense/v1/expensereports/16367000000081005/approvalhistory \ --header 'Authorization: Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f' \ --header 'X-com-zoho-expense-organizationid: 10234695'

Response Example

{ "code": 0, "message": "success", "approval_history": [ { "approval_history_id": "16367000000101079", "report_name": "Trip to SFA", "report_id": "16367000000081005", "report_number": "ER-00001", "expense_id": "16367000000078079", "comments": "Purpose is not valid.", "description": "To client office", "type": "approval_history", "previous_status": "approved", "approval_status": "approved", "previous_approver_id": "", "previous_approver_name": "", "previous_approver_email": "will.smith@gmail.com", "approver_id": "16367000000073001", "approver_name": "PATRICIA BOYLE", "date": "2017-02-20", "time": "5:59 PM", "commented_by_id": "16367000000073001", "commented_by": "Will Smith", "photo_url": "https://contacts.zoho.com/file?ID=16b87b9dbae5b1008b32c9736141b6f63b3864c8cf94d900cf9bb346f0eb97b105c58df21a12283d421fa80a6cb97ffca294a909bc0c7ae9f1e14dd2e499565d&fs=thumb" }, {...}, {...} ] }

Take back a report AI Tools

Open in ChatGPT

Open in ChatGPT to ask questions about this page

Open in Claude

Open in Claude to ask questions about this page

Copy as Markdown

Copy this page as markdown to use with AI assistants

View as Markdown

Open this page as markdown in a new tab

Recall a submitted report.
OAuth Scope : ZohoExpense.expensereport.CREATE

Arguments

comments
string
Reason for recalling the submitted report. Recorded in the audit trail.

Path Parameters

expense_report_id
string
(Required)
Unique identifier of the report.

Headers

X-com-zoho-expense-organizationid
string
(Required)
ID of the organization

Request Example

Click to copy
parameters_data='{"field1":"value1","field2":"value2"}'; headers_data = Map(); headers_data.put("X-com-zoho-expense-organizationid", "10234695"); headers_data.put("Authorization", "Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f"); response = invokeUrl [ url: "https://www.zohoapis.com/expense/v1/expensereports/16367000000081005/takeback" type: POST headers: headers_data content-type: application/json parameters: parameters_data connection: <connection_name> ]; info response;
OkHttpClient client = new OkHttpClient(); MediaType mediaType = MediaType.parse("application/json"); RequestBody body = RequestBody.create(mediaType, "{\"field1\":\"value1\",\"field2\":\"value2\"}"); Request request = new Request.Builder() .url("https://www.zohoapis.com/expense/v1/expensereports/16367000000081005/takeback") .post(body) .addHeader("X-com-zoho-expense-organizationid", "10234695") .addHeader("Authorization", "Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f") .addHeader("content-type", "application/json") .build(); Response response = client.newCall(request).execute();
const options = { method: 'POST', headers: { 'X-com-zoho-expense-organizationid': '10234695', Authorization: 'Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f', 'content-type': 'application/json' }, body: '{"field1":"value1","field2":"value2"}' }; fetch('https://www.zohoapis.com/expense/v1/expensereports/16367000000081005/takeback', options) .then(response => response.json()) .then(response => console.log(response)) .catch(err => console.error(err));
import http.client conn = http.client.HTTPSConnection("www.zohoapis.com") payload = "{\"field1\":\"value1\",\"field2\":\"value2\"}" headers = { 'X-com-zoho-expense-organizationid': "10234695", 'Authorization': "Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f", 'content-type': "application/json" } conn.request("POST", "/expense/v1/expensereports/16367000000081005/takeback", payload, headers) res = conn.getresponse() data = res.read() print(data.decode("utf-8"))
const http = require("https"); const options = { "method": "POST", "hostname": "www.zohoapis.com", "port": null, "path": "/expense/v1/expensereports/16367000000081005/takeback", "headers": { "X-com-zoho-expense-organizationid": "10234695", "Authorization": "Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f", "content-type": "application/json" } }; const req = http.request(options, function (res) { const chunks = []; res.on("data", function (chunk) { chunks.push(chunk); }); res.on("end", function () { const body = Buffer.concat(chunks); console.log(body.toString()); }); }); req.write(JSON.stringify({field1: 'value1', field2: 'value2'})); req.end();
curl --request POST \ --url https://www.zohoapis.com/expense/v1/expensereports/16367000000081005/takeback \ --header 'Authorization: Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f' \ --header 'X-com-zoho-expense-organizationid: 10234695' \ --header 'content-type: application/json' \ --data '{"field1":"value1","field2":"value2"}'

Body Parameters

Click to copy
{ "comments": "Need to add a missing receipt before the manager reviews it." }

Response Example

{ "code": 0, "message": "Expense report has been taken back successfully." }

Archive a report AI Tools

Open in ChatGPT

Open in ChatGPT to ask questions about this page

Open in Claude

Open in Claude to ask questions about this page

Copy as Markdown

Copy this page as markdown to use with AI assistants

View as Markdown

Open this page as markdown in a new tab

Archive a report.
OAuth Scope : ZohoExpense.expensereport.CREATE

Path Parameters

expense_report_id
string
(Required)
Unique identifier of the report.

Headers

X-com-zoho-expense-organizationid
string
(Required)
ID of the organization

Request Example

Click to copy
headers_data = Map(); headers_data.put("X-com-zoho-expense-organizationid", "10234695"); headers_data.put("Authorization", "Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f"); response = invokeUrl [ url: "https://www.zohoapis.com/expense/v1/expensereports/16367000000081005/archive" type: POST headers: headers_data connection: <connection_name> ]; info response;
OkHttpClient client = new OkHttpClient(); Request request = new Request.Builder() .url("https://www.zohoapis.com/expense/v1/expensereports/16367000000081005/archive") .post(null) .addHeader("X-com-zoho-expense-organizationid", "10234695") .addHeader("Authorization", "Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f") .build(); Response response = client.newCall(request).execute();
const options = { method: 'POST', headers: { 'X-com-zoho-expense-organizationid': '10234695', Authorization: 'Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f' } }; fetch('https://www.zohoapis.com/expense/v1/expensereports/16367000000081005/archive', options) .then(response => response.json()) .then(response => console.log(response)) .catch(err => console.error(err));
import http.client conn = http.client.HTTPSConnection("www.zohoapis.com") headers = { 'X-com-zoho-expense-organizationid': "10234695", 'Authorization': "Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f" } conn.request("POST", "/expense/v1/expensereports/16367000000081005/archive", headers=headers) res = conn.getresponse() data = res.read() print(data.decode("utf-8"))
const http = require("https"); const options = { "method": "POST", "hostname": "www.zohoapis.com", "port": null, "path": "/expense/v1/expensereports/16367000000081005/archive", "headers": { "X-com-zoho-expense-organizationid": "10234695", "Authorization": "Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f" } }; const req = http.request(options, function (res) { const chunks = []; res.on("data", function (chunk) { chunks.push(chunk); }); res.on("end", function () { const body = Buffer.concat(chunks); console.log(body.toString()); }); }); req.end();
curl --request POST \ --url https://www.zohoapis.com/expense/v1/expensereports/16367000000081005/archive \ --header 'Authorization: Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f' \ --header 'X-com-zoho-expense-organizationid: 10234695'

Response Example

{ "code": 0, "message": "Expense report has been archived successfully." }

Unarchive a report AI Tools

Open in ChatGPT

Open in ChatGPT to ask questions about this page

Open in Claude

Open in Claude to ask questions about this page

Copy as Markdown

Copy this page as markdown to use with AI assistants

View as Markdown

Open this page as markdown in a new tab

Unarchive a report.
OAuth Scope : ZohoExpense.expensereport.CREATE

Path Parameters

expense_report_id
string
(Required)
Unique identifier of the report.

Headers

X-com-zoho-expense-organizationid
string
(Required)
ID of the organization

Request Example

Click to copy
headers_data = Map(); headers_data.put("X-com-zoho-expense-organizationid", "10234695"); headers_data.put("Authorization", "Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f"); response = invokeUrl [ url: "https://www.zohoapis.com/expense/v1/expensereports/16367000000081005/unarchive" type: POST headers: headers_data connection: <connection_name> ]; info response;
OkHttpClient client = new OkHttpClient(); Request request = new Request.Builder() .url("https://www.zohoapis.com/expense/v1/expensereports/16367000000081005/unarchive") .post(null) .addHeader("X-com-zoho-expense-organizationid", "10234695") .addHeader("Authorization", "Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f") .build(); Response response = client.newCall(request).execute();
const options = { method: 'POST', headers: { 'X-com-zoho-expense-organizationid': '10234695', Authorization: 'Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f' } }; fetch('https://www.zohoapis.com/expense/v1/expensereports/16367000000081005/unarchive', options) .then(response => response.json()) .then(response => console.log(response)) .catch(err => console.error(err));
import http.client conn = http.client.HTTPSConnection("www.zohoapis.com") headers = { 'X-com-zoho-expense-organizationid': "10234695", 'Authorization': "Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f" } conn.request("POST", "/expense/v1/expensereports/16367000000081005/unarchive", headers=headers) res = conn.getresponse() data = res.read() print(data.decode("utf-8"))
const http = require("https"); const options = { "method": "POST", "hostname": "www.zohoapis.com", "port": null, "path": "/expense/v1/expensereports/16367000000081005/unarchive", "headers": { "X-com-zoho-expense-organizationid": "10234695", "Authorization": "Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f" } }; const req = http.request(options, function (res) { const chunks = []; res.on("data", function (chunk) { chunks.push(chunk); }); res.on("end", function () { const body = Buffer.concat(chunks); console.log(body.toString()); }); }); req.end();
curl --request POST \ --url https://www.zohoapis.com/expense/v1/expensereports/16367000000081005/unarchive \ --header 'Authorization: Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f' \ --header 'X-com-zoho-expense-organizationid: 10234695'

Response Example

{ "code": 0, "message": "Expense report has been unarchived successfully." }

Share a report AI Tools

Open in ChatGPT

Open in ChatGPT to ask questions about this page

Open in Claude

Open in Claude to ask questions about this page

Copy as Markdown

Copy this page as markdown to use with AI assistants

View as Markdown

Open this page as markdown in a new tab

Share a report with other users in the organization.
OAuth Scope : ZohoExpense.expensereport.CREATE

Arguments

user_ids
string
Comma-separated list of user IDs the report should be shared with.

Path Parameters

expense_report_id
string
(Required)
Unique identifier of the report.

Headers

X-com-zoho-expense-organizationid
string
(Required)
ID of the organization

Request Example

Click to copy
parameters_data='{"field1":"value1","field2":"value2"}'; headers_data = Map(); headers_data.put("X-com-zoho-expense-organizationid", "10234695"); headers_data.put("Authorization", "Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f"); response = invokeUrl [ url: "https://www.zohoapis.com/expense/v1/expensereports/16367000000081005/share" type: POST headers: headers_data content-type: application/json parameters: parameters_data connection: <connection_name> ]; info response;
OkHttpClient client = new OkHttpClient(); MediaType mediaType = MediaType.parse("application/json"); RequestBody body = RequestBody.create(mediaType, "{\"field1\":\"value1\",\"field2\":\"value2\"}"); Request request = new Request.Builder() .url("https://www.zohoapis.com/expense/v1/expensereports/16367000000081005/share") .post(body) .addHeader("X-com-zoho-expense-organizationid", "10234695") .addHeader("Authorization", "Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f") .addHeader("content-type", "application/json") .build(); Response response = client.newCall(request).execute();
const options = { method: 'POST', headers: { 'X-com-zoho-expense-organizationid': '10234695', Authorization: 'Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f', 'content-type': 'application/json' }, body: '{"field1":"value1","field2":"value2"}' }; fetch('https://www.zohoapis.com/expense/v1/expensereports/16367000000081005/share', options) .then(response => response.json()) .then(response => console.log(response)) .catch(err => console.error(err));
import http.client conn = http.client.HTTPSConnection("www.zohoapis.com") payload = "{\"field1\":\"value1\",\"field2\":\"value2\"}" headers = { 'X-com-zoho-expense-organizationid': "10234695", 'Authorization': "Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f", 'content-type': "application/json" } conn.request("POST", "/expense/v1/expensereports/16367000000081005/share", payload, headers) res = conn.getresponse() data = res.read() print(data.decode("utf-8"))
const http = require("https"); const options = { "method": "POST", "hostname": "www.zohoapis.com", "port": null, "path": "/expense/v1/expensereports/16367000000081005/share", "headers": { "X-com-zoho-expense-organizationid": "10234695", "Authorization": "Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f", "content-type": "application/json" } }; const req = http.request(options, function (res) { const chunks = []; res.on("data", function (chunk) { chunks.push(chunk); }); res.on("end", function () { const body = Buffer.concat(chunks); console.log(body.toString()); }); }); req.write(JSON.stringify({field1: 'value1', field2: 'value2'})); req.end();
curl --request POST \ --url https://www.zohoapis.com/expense/v1/expensereports/16367000000081005/share \ --header 'Authorization: Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f' \ --header 'X-com-zoho-expense-organizationid: 10234695' \ --header 'content-type: application/json' \ --data '{"field1":"value1","field2":"value2"}'

Body Parameters

Click to copy

Response Example

Forward approval of a report AI Tools

Open in ChatGPT

Open in ChatGPT to ask questions about this page

Open in Claude

Open in Claude to ask questions about this page

Copy as Markdown

Copy this page as markdown to use with AI assistants

View as Markdown

Open this page as markdown in a new tab

Forward the approval of a report to another approver.
OAuth Scope : ZohoExpense.approval.CREATE

Arguments

approver_id
string
Unique ID for the current approver.
comments
string
Note shown to the next approver explaining why approval is being forwarded.
approval_reason
string
Reason recorded with the forward action in the audit trail.

Path Parameters

expense_report_id
string
(Required)
Unique identifier of the report.

Headers

X-com-zoho-expense-organizationid
string
(Required)
ID of the organization

Request Example

Click to copy
parameters_data='{"field1":"value1","field2":"value2"}'; headers_data = Map(); headers_data.put("X-com-zoho-expense-organizationid", "10234695"); headers_data.put("Authorization", "Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f"); response = invokeUrl [ url: "https://www.zohoapis.com/expense/v1/expensereports/16367000000081005/forwardapproval" type: POST headers: headers_data content-type: application/json parameters: parameters_data connection: <connection_name> ]; info response;
OkHttpClient client = new OkHttpClient(); MediaType mediaType = MediaType.parse("application/json"); RequestBody body = RequestBody.create(mediaType, "{\"field1\":\"value1\",\"field2\":\"value2\"}"); Request request = new Request.Builder() .url("https://www.zohoapis.com/expense/v1/expensereports/16367000000081005/forwardapproval") .post(body) .addHeader("X-com-zoho-expense-organizationid", "10234695") .addHeader("Authorization", "Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f") .addHeader("content-type", "application/json") .build(); Response response = client.newCall(request).execute();
const options = { method: 'POST', headers: { 'X-com-zoho-expense-organizationid': '10234695', Authorization: 'Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f', 'content-type': 'application/json' }, body: '{"field1":"value1","field2":"value2"}' }; fetch('https://www.zohoapis.com/expense/v1/expensereports/16367000000081005/forwardapproval', options) .then(response => response.json()) .then(response => console.log(response)) .catch(err => console.error(err));
import http.client conn = http.client.HTTPSConnection("www.zohoapis.com") payload = "{\"field1\":\"value1\",\"field2\":\"value2\"}" headers = { 'X-com-zoho-expense-organizationid': "10234695", 'Authorization': "Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f", 'content-type': "application/json" } conn.request("POST", "/expense/v1/expensereports/16367000000081005/forwardapproval", payload, headers) res = conn.getresponse() data = res.read() print(data.decode("utf-8"))
const http = require("https"); const options = { "method": "POST", "hostname": "www.zohoapis.com", "port": null, "path": "/expense/v1/expensereports/16367000000081005/forwardapproval", "headers": { "X-com-zoho-expense-organizationid": "10234695", "Authorization": "Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f", "content-type": "application/json" } }; const req = http.request(options, function (res) { const chunks = []; res.on("data", function (chunk) { chunks.push(chunk); }); res.on("end", function () { const body = Buffer.concat(chunks); console.log(body.toString()); }); }); req.write(JSON.stringify({field1: 'value1', field2: 'value2'})); req.end();
curl --request POST \ --url https://www.zohoapis.com/expense/v1/expensereports/16367000000081005/forwardapproval \ --header 'Authorization: Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f' \ --header 'X-com-zoho-expense-organizationid: 10234695' \ --header 'content-type: application/json' \ --data '{"field1":"value1","field2":"value2"}'

Body Parameters

Click to copy
{ "approver_id": "16367000000073001", "comments": "Out of office until Friday - please review.", "approval_reason": "Delegating to senior approver for high-value expenses." }

Response Example

{ "code": 0, "message": "Expense report approval has been forwarded successfully." }

Reject an expense in a report AI Tools

Open in ChatGPT

Open in ChatGPT to ask questions about this page

Open in Claude

Open in Claude to ask questions about this page

Copy as Markdown

Copy this page as markdown to use with AI assistants

View as Markdown

Open this page as markdown in a new tab

Reject a single expense line item within a report.
OAuth Scope : ZohoExpense.approval.CREATE

Arguments

comments
string
Reason for rejecting this expense line item. Recorded in the audit trail and visible to the submitter.

Path Parameters

expense_report_id
string
(Required)
Unique identifier of the report.
expense_id
string
(Required)
Unique identifier of the expense within the report.

Headers

X-com-zoho-expense-organizationid
string
(Required)
ID of the organization

Request Example

Click to copy
parameters_data='{"field1":"value1","field2":"value2"}'; headers_data = Map(); headers_data.put("X-com-zoho-expense-organizationid", "10234695"); headers_data.put("Authorization", "Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f"); response = invokeUrl [ url: "https://www.zohoapis.com/expense/v1/expensereports/16367000000081005/expense/16367000000089001/reject" type: POST headers: headers_data content-type: application/json parameters: parameters_data connection: <connection_name> ]; info response;
OkHttpClient client = new OkHttpClient(); MediaType mediaType = MediaType.parse("application/json"); RequestBody body = RequestBody.create(mediaType, "{\"field1\":\"value1\",\"field2\":\"value2\"}"); Request request = new Request.Builder() .url("https://www.zohoapis.com/expense/v1/expensereports/16367000000081005/expense/16367000000089001/reject") .post(body) .addHeader("X-com-zoho-expense-organizationid", "10234695") .addHeader("Authorization", "Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f") .addHeader("content-type", "application/json") .build(); Response response = client.newCall(request).execute();
const options = { method: 'POST', headers: { 'X-com-zoho-expense-organizationid': '10234695', Authorization: 'Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f', 'content-type': 'application/json' }, body: '{"field1":"value1","field2":"value2"}' }; fetch('https://www.zohoapis.com/expense/v1/expensereports/16367000000081005/expense/16367000000089001/reject', options) .then(response => response.json()) .then(response => console.log(response)) .catch(err => console.error(err));
import http.client conn = http.client.HTTPSConnection("www.zohoapis.com") payload = "{\"field1\":\"value1\",\"field2\":\"value2\"}" headers = { 'X-com-zoho-expense-organizationid': "10234695", 'Authorization': "Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f", 'content-type': "application/json" } conn.request("POST", "/expense/v1/expensereports/16367000000081005/expense/16367000000089001/reject", payload, headers) res = conn.getresponse() data = res.read() print(data.decode("utf-8"))
const http = require("https"); const options = { "method": "POST", "hostname": "www.zohoapis.com", "port": null, "path": "/expense/v1/expensereports/16367000000081005/expense/16367000000089001/reject", "headers": { "X-com-zoho-expense-organizationid": "10234695", "Authorization": "Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f", "content-type": "application/json" } }; const req = http.request(options, function (res) { const chunks = []; res.on("data", function (chunk) { chunks.push(chunk); }); res.on("end", function () { const body = Buffer.concat(chunks); console.log(body.toString()); }); }); req.write(JSON.stringify({field1: 'value1', field2: 'value2'})); req.end();
curl --request POST \ --url https://www.zohoapis.com/expense/v1/expensereports/16367000000081005/expense/16367000000089001/reject \ --header 'Authorization: Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f' \ --header 'X-com-zoho-expense-organizationid: 10234695' \ --header 'content-type: application/json' \ --data '{"field1":"value1","field2":"value2"}'

Body Parameters

Click to copy
{ "comments": "Missing original receipt." }

Response Example

{ "code": 0, "message": "Expense has been rejected successfully." }

Bulk reject expenses in a report AI Tools

Open in ChatGPT

Open in ChatGPT to ask questions about this page

Open in Claude

Open in Claude to ask questions about this page

Copy as Markdown

Copy this page as markdown to use with AI assistants

View as Markdown

Open this page as markdown in a new tab

Reject multiple expense line items within a report in a single call.
OAuth Scope : ZohoExpense.approval.CREATE

Arguments

comments
string
Reason applied to every rejected expense. Recorded in the audit trail.
expense_ids
string
Comma-separated list of expense IDs to reject (max 30).

Path Parameters

expense_report_id
string
(Required)
Unique identifier of the report.

Headers

X-com-zoho-expense-organizationid
string
(Required)
ID of the organization

Request Example

Click to copy
parameters_data='{"field1":"value1","field2":"value2"}'; headers_data = Map(); headers_data.put("X-com-zoho-expense-organizationid", "10234695"); headers_data.put("Authorization", "Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f"); response = invokeUrl [ url: "https://www.zohoapis.com/expense/v1/expensereports/16367000000081005/expensebulkreject" type: POST headers: headers_data content-type: application/json parameters: parameters_data connection: <connection_name> ]; info response;
OkHttpClient client = new OkHttpClient(); MediaType mediaType = MediaType.parse("application/json"); RequestBody body = RequestBody.create(mediaType, "{\"field1\":\"value1\",\"field2\":\"value2\"}"); Request request = new Request.Builder() .url("https://www.zohoapis.com/expense/v1/expensereports/16367000000081005/expensebulkreject") .post(body) .addHeader("X-com-zoho-expense-organizationid", "10234695") .addHeader("Authorization", "Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f") .addHeader("content-type", "application/json") .build(); Response response = client.newCall(request).execute();
const options = { method: 'POST', headers: { 'X-com-zoho-expense-organizationid': '10234695', Authorization: 'Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f', 'content-type': 'application/json' }, body: '{"field1":"value1","field2":"value2"}' }; fetch('https://www.zohoapis.com/expense/v1/expensereports/16367000000081005/expensebulkreject', options) .then(response => response.json()) .then(response => console.log(response)) .catch(err => console.error(err));
import http.client conn = http.client.HTTPSConnection("www.zohoapis.com") payload = "{\"field1\":\"value1\",\"field2\":\"value2\"}" headers = { 'X-com-zoho-expense-organizationid': "10234695", 'Authorization': "Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f", 'content-type': "application/json" } conn.request("POST", "/expense/v1/expensereports/16367000000081005/expensebulkreject", payload, headers) res = conn.getresponse() data = res.read() print(data.decode("utf-8"))
const http = require("https"); const options = { "method": "POST", "hostname": "www.zohoapis.com", "port": null, "path": "/expense/v1/expensereports/16367000000081005/expensebulkreject", "headers": { "X-com-zoho-expense-organizationid": "10234695", "Authorization": "Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f", "content-type": "application/json" } }; const req = http.request(options, function (res) { const chunks = []; res.on("data", function (chunk) { chunks.push(chunk); }); res.on("end", function () { const body = Buffer.concat(chunks); console.log(body.toString()); }); }); req.write(JSON.stringify({field1: 'value1', field2: 'value2'})); req.end();
curl --request POST \ --url https://www.zohoapis.com/expense/v1/expensereports/16367000000081005/expensebulkreject \ --header 'Authorization: Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f' \ --header 'X-com-zoho-expense-organizationid: 10234695' \ --header 'content-type: application/json' \ --data '{"field1":"value1","field2":"value2"}'

Body Parameters

Click to copy
{ "comments": "Policy violation - duplicate receipts.", "expense_ids": "16367000000089001,16367000000089002,16367000000089003" }

Response Example

{ "code": 0, "message": "The selected expenses have been rejected successfully." }

Validate a report AI Tools

Open in ChatGPT

Open in ChatGPT to ask questions about this page

Open in Claude

Open in Claude to ask questions about this page

Copy as Markdown

Copy this page as markdown to use with AI assistants

View as Markdown

Open this page as markdown in a new tab

Validate a report before submission. Returns any policy violations, missing-receipt warnings, or other issues that would block submission.
OAuth Scope : ZohoExpense.expensereport.READ

Path Parameters

expense_report_id
string
(Required)
Unique identifier of the report.

Headers

X-com-zoho-expense-organizationid
string
(Required)
ID of the organization

Request Example

Click to copy
headers_data = Map(); headers_data.put("X-com-zoho-expense-organizationid", "10234695"); headers_data.put("Authorization", "Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f"); response = invokeUrl [ url: "https://www.zohoapis.com/expense/v1/expensereports/16367000000081005/validate" type: GET headers: headers_data connection: <connection_name> ]; info response;
OkHttpClient client = new OkHttpClient(); Request request = new Request.Builder() .url("https://www.zohoapis.com/expense/v1/expensereports/16367000000081005/validate") .get() .addHeader("X-com-zoho-expense-organizationid", "10234695") .addHeader("Authorization", "Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f") .build(); Response response = client.newCall(request).execute();
const options = { method: 'GET', headers: { 'X-com-zoho-expense-organizationid': '10234695', Authorization: 'Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f' } }; fetch('https://www.zohoapis.com/expense/v1/expensereports/16367000000081005/validate', options) .then(response => response.json()) .then(response => console.log(response)) .catch(err => console.error(err));
import http.client conn = http.client.HTTPSConnection("www.zohoapis.com") headers = { 'X-com-zoho-expense-organizationid': "10234695", 'Authorization': "Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f" } conn.request("GET", "/expense/v1/expensereports/16367000000081005/validate", headers=headers) res = conn.getresponse() data = res.read() print(data.decode("utf-8"))
const http = require("https"); const options = { "method": "GET", "hostname": "www.zohoapis.com", "port": null, "path": "/expense/v1/expensereports/16367000000081005/validate", "headers": { "X-com-zoho-expense-organizationid": "10234695", "Authorization": "Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f" } }; const req = http.request(options, function (res) { const chunks = []; res.on("data", function (chunk) { chunks.push(chunk); }); res.on("end", function () { const body = Buffer.concat(chunks); console.log(body.toString()); }); }); req.end();
curl --request GET \ --url https://www.zohoapis.com/expense/v1/expensereports/16367000000081005/validate \ --header 'Authorization: Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f' \ --header 'X-com-zoho-expense-organizationid: 10234695'

Response Example

{ "code": 0, "message": "Validation completed.", "is_valid": false, "violations": [ { "expense_id": "16367000000089001", "violation_type": "receipt_missing", "message": "Original receipt is required for this expense." } ] }

Retrieve the receipt of a report AI Tools

Open in ChatGPT

Open in ChatGPT to ask questions about this page

Open in Claude

Open in Claude to ask questions about this page

Copy as Markdown

Copy this page as markdown to use with AI assistants

View as Markdown

Open this page as markdown in a new tab

Download the receipt file associated with a report.
OAuth Scope : ZohoExpense.expensereport.READ

Path Parameters

expense_report_id
string
(Required)
Unique identifier of the report.

Query Parameters

inline
boolean
When true, returns the file inline (display) instead of as an attachment download.

Headers

X-com-zoho-expense-organizationid
string
(Required)
ID of the organization

Request Example

Click to copy
headers_data = Map(); headers_data.put("X-com-zoho-expense-organizationid", "10234695"); headers_data.put("Authorization", "Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f"); response = invokeUrl [ url: "https://www.zohoapis.com/expense/v1/expensereports/16367000000081005/receipt" type: GET headers: headers_data connection: <connection_name> ]; info response;
OkHttpClient client = new OkHttpClient(); Request request = new Request.Builder() .url("https://www.zohoapis.com/expense/v1/expensereports/16367000000081005/receipt") .get() .addHeader("X-com-zoho-expense-organizationid", "10234695") .addHeader("Authorization", "Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f") .build(); Response response = client.newCall(request).execute();
const options = { method: 'GET', headers: { 'X-com-zoho-expense-organizationid': '10234695', Authorization: 'Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f' } }; fetch('https://www.zohoapis.com/expense/v1/expensereports/16367000000081005/receipt', options) .then(response => response.json()) .then(response => console.log(response)) .catch(err => console.error(err));
import http.client conn = http.client.HTTPSConnection("www.zohoapis.com") headers = { 'X-com-zoho-expense-organizationid': "10234695", 'Authorization': "Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f" } conn.request("GET", "/expense/v1/expensereports/16367000000081005/receipt", headers=headers) res = conn.getresponse() data = res.read() print(data.decode("utf-8"))
const http = require("https"); const options = { "method": "GET", "hostname": "www.zohoapis.com", "port": null, "path": "/expense/v1/expensereports/16367000000081005/receipt", "headers": { "X-com-zoho-expense-organizationid": "10234695", "Authorization": "Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f" } }; const req = http.request(options, function (res) { const chunks = []; res.on("data", function (chunk) { chunks.push(chunk); }); res.on("end", function () { const body = Buffer.concat(chunks); console.log(body.toString()); }); }); req.end();
curl --request GET \ --url https://www.zohoapis.com/expense/v1/expensereports/16367000000081005/receipt \ --header 'Authorization: Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f' \ --header 'X-com-zoho-expense-organizationid: 10234695'

Response Example

{ "code": 0, "message": "success" }

Add a comment to a report AI Tools

Open in ChatGPT

Open in ChatGPT to ask questions about this page

Open in Claude

Open in Claude to ask questions about this page

Copy as Markdown

Copy this page as markdown to use with AI assistants

View as Markdown

Open this page as markdown in a new tab

Add a comment to a report, optionally tying the comment to a specific expense line.
OAuth Scope : ZohoExpense.expensereport.CREATE

Arguments

expense_id
string
Optional expense ID if the comment is tied to a specific line item.
comments
string
(Required)
Comment body. Supports rich text. Maximum 5000 characters.

Path Parameters

expense_report_id
string
(Required)
Unique identifier of the report.

Headers

X-com-zoho-expense-organizationid
string
(Required)
ID of the organization

Request Example

Click to copy
parameters_data='{"field1":"value1","field2":"value2"}'; headers_data = Map(); headers_data.put("X-com-zoho-expense-organizationid", "10234695"); headers_data.put("Authorization", "Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f"); response = invokeUrl [ url: "https://www.zohoapis.com/expense/v1/expensereports/16367000000081005/comments" type: POST headers: headers_data content-type: application/json parameters: parameters_data connection: <connection_name> ]; info response;
OkHttpClient client = new OkHttpClient(); MediaType mediaType = MediaType.parse("application/json"); RequestBody body = RequestBody.create(mediaType, "{\"field1\":\"value1\",\"field2\":\"value2\"}"); Request request = new Request.Builder() .url("https://www.zohoapis.com/expense/v1/expensereports/16367000000081005/comments") .post(body) .addHeader("X-com-zoho-expense-organizationid", "10234695") .addHeader("Authorization", "Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f") .addHeader("content-type", "application/json") .build(); Response response = client.newCall(request).execute();
const options = { method: 'POST', headers: { 'X-com-zoho-expense-organizationid': '10234695', Authorization: 'Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f', 'content-type': 'application/json' }, body: '{"field1":"value1","field2":"value2"}' }; fetch('https://www.zohoapis.com/expense/v1/expensereports/16367000000081005/comments', options) .then(response => response.json()) .then(response => console.log(response)) .catch(err => console.error(err));
import http.client conn = http.client.HTTPSConnection("www.zohoapis.com") payload = "{\"field1\":\"value1\",\"field2\":\"value2\"}" headers = { 'X-com-zoho-expense-organizationid': "10234695", 'Authorization': "Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f", 'content-type': "application/json" } conn.request("POST", "/expense/v1/expensereports/16367000000081005/comments", payload, headers) res = conn.getresponse() data = res.read() print(data.decode("utf-8"))
const http = require("https"); const options = { "method": "POST", "hostname": "www.zohoapis.com", "port": null, "path": "/expense/v1/expensereports/16367000000081005/comments", "headers": { "X-com-zoho-expense-organizationid": "10234695", "Authorization": "Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f", "content-type": "application/json" } }; const req = http.request(options, function (res) { const chunks = []; res.on("data", function (chunk) { chunks.push(chunk); }); res.on("end", function () { const body = Buffer.concat(chunks); console.log(body.toString()); }); }); req.write(JSON.stringify({field1: 'value1', field2: 'value2'})); req.end();
curl --request POST \ --url https://www.zohoapis.com/expense/v1/expensereports/16367000000081005/comments \ --header 'Authorization: Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f' \ --header 'X-com-zoho-expense-organizationid: 10234695' \ --header 'content-type: application/json' \ --data '{"field1":"value1","field2":"value2"}'

Body Parameters

Click to copy
{ "expense_id": "16367000000089001", "comments": "Please attach the original receipt before resubmitting." }

Response Example

{ "code": 0, "message": "Comment has been added successfully." }

Delete a comment of a report AI Tools

Open in ChatGPT

Open in ChatGPT to ask questions about this page

Open in Claude

Open in Claude to ask questions about this page

Copy as Markdown

Copy this page as markdown to use with AI assistants

View as Markdown

Open this page as markdown in a new tab

Delete a comment from a report.
OAuth Scope : ZohoExpense.expensereport.DELETE

Path Parameters

expense_report_id
string
(Required)
Unique identifier of the report.
comment_id
string
(Required)
Unique identifier of the comment.

Headers

X-com-zoho-expense-organizationid
string
(Required)
ID of the organization

Request Example

Click to copy
headers_data = Map(); headers_data.put("X-com-zoho-expense-organizationid", "10234695"); headers_data.put("Authorization", "Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f"); response = invokeUrl [ url: "https://www.zohoapis.com/expense/v1/expensereports/16367000000081005/comments/16367000000091001" type: DELETE headers: headers_data connection: <connection_name> ]; info response;
OkHttpClient client = new OkHttpClient(); Request request = new Request.Builder() .url("https://www.zohoapis.com/expense/v1/expensereports/16367000000081005/comments/16367000000091001") .delete(null) .addHeader("X-com-zoho-expense-organizationid", "10234695") .addHeader("Authorization", "Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f") .build(); Response response = client.newCall(request).execute();
const options = { method: 'DELETE', headers: { 'X-com-zoho-expense-organizationid': '10234695', Authorization: 'Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f' } }; fetch('https://www.zohoapis.com/expense/v1/expensereports/16367000000081005/comments/16367000000091001', options) .then(response => response.json()) .then(response => console.log(response)) .catch(err => console.error(err));
import http.client conn = http.client.HTTPSConnection("www.zohoapis.com") headers = { 'X-com-zoho-expense-organizationid': "10234695", 'Authorization': "Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f" } conn.request("DELETE", "/expense/v1/expensereports/16367000000081005/comments/16367000000091001", headers=headers) res = conn.getresponse() data = res.read() print(data.decode("utf-8"))
const http = require("https"); const options = { "method": "DELETE", "hostname": "www.zohoapis.com", "port": null, "path": "/expense/v1/expensereports/16367000000081005/comments/16367000000091001", "headers": { "X-com-zoho-expense-organizationid": "10234695", "Authorization": "Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f" } }; const req = http.request(options, function (res) { const chunks = []; res.on("data", function (chunk) { chunks.push(chunk); }); res.on("end", function () { const body = Buffer.concat(chunks); console.log(body.toString()); }); }); req.end();
curl --request DELETE \ --url https://www.zohoapis.com/expense/v1/expensereports/16367000000081005/comments/16367000000091001 \ --header 'Authorization: Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f' \ --header 'X-com-zoho-expense-organizationid: 10234695'

Response Example

{ "code": 0, "message": "Comment has been deleted successfully." }

Associate tags to a report AI Tools

Open in ChatGPT

Open in ChatGPT to ask questions about this page

Open in Claude

Open in Claude to ask questions about this page

Copy as Markdown

Copy this page as markdown to use with AI assistants

View as Markdown

Open this page as markdown in a new tab

Associate or update tags on a report.
OAuth Scope : ZohoExpense.expensereport.CREATE

Arguments

tags
array
List of tag option associations to apply to the report.
Show Sub-Attributes arrow
tag_id
string
Unique identifier of the tag.
tag_option_id
string
Unique identifier of the tag option being applied.

Path Parameters

expense_report_id
string
(Required)
Unique identifier of the report.

Headers

X-com-zoho-expense-organizationid
string
(Required)
ID of the organization

Request Example

Click to copy
parameters_data='{"field1":"value1","field2":"value2"}'; headers_data = Map(); headers_data.put("X-com-zoho-expense-organizationid", "10234695"); headers_data.put("Authorization", "Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f"); response = invokeUrl [ url: "https://www.zohoapis.com/expense/v1/expensereports/16367000000081005/tags" type: POST headers: headers_data content-type: application/json parameters: parameters_data connection: <connection_name> ]; info response;
OkHttpClient client = new OkHttpClient(); MediaType mediaType = MediaType.parse("application/json"); RequestBody body = RequestBody.create(mediaType, "{\"field1\":\"value1\",\"field2\":\"value2\"}"); Request request = new Request.Builder() .url("https://www.zohoapis.com/expense/v1/expensereports/16367000000081005/tags") .post(body) .addHeader("X-com-zoho-expense-organizationid", "10234695") .addHeader("Authorization", "Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f") .addHeader("content-type", "application/json") .build(); Response response = client.newCall(request).execute();
const options = { method: 'POST', headers: { 'X-com-zoho-expense-organizationid': '10234695', Authorization: 'Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f', 'content-type': 'application/json' }, body: '{"field1":"value1","field2":"value2"}' }; fetch('https://www.zohoapis.com/expense/v1/expensereports/16367000000081005/tags', options) .then(response => response.json()) .then(response => console.log(response)) .catch(err => console.error(err));
import http.client conn = http.client.HTTPSConnection("www.zohoapis.com") payload = "{\"field1\":\"value1\",\"field2\":\"value2\"}" headers = { 'X-com-zoho-expense-organizationid': "10234695", 'Authorization': "Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f", 'content-type': "application/json" } conn.request("POST", "/expense/v1/expensereports/16367000000081005/tags", payload, headers) res = conn.getresponse() data = res.read() print(data.decode("utf-8"))
const http = require("https"); const options = { "method": "POST", "hostname": "www.zohoapis.com", "port": null, "path": "/expense/v1/expensereports/16367000000081005/tags", "headers": { "X-com-zoho-expense-organizationid": "10234695", "Authorization": "Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f", "content-type": "application/json" } }; const req = http.request(options, function (res) { const chunks = []; res.on("data", function (chunk) { chunks.push(chunk); }); res.on("end", function () { const body = Buffer.concat(chunks); console.log(body.toString()); }); }); req.write(JSON.stringify({field1: 'value1', field2: 'value2'})); req.end();
curl --request POST \ --url https://www.zohoapis.com/expense/v1/expensereports/16367000000081005/tags \ --header 'Authorization: Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f' \ --header 'X-com-zoho-expense-organizationid: 10234695' \ --header 'content-type: application/json' \ --data '{"field1":"value1","field2":"value2"}'

Body Parameters

Click to copy
{ "tags": [ { "tag_id": "16367000000092001", "tag_option_id": "16367000000092002" } ] }

Response Example

{ "code": 0, "message": "Tags have been associated successfully." }

Add expenses to a report AI Tools

Open in ChatGPT

Open in ChatGPT to ask questions about this page

Open in Claude

Open in Claude to ask questions about this page

Copy as Markdown

Copy this page as markdown to use with AI assistants

View as Markdown

Open this page as markdown in a new tab

Attach one or more existing expenses to a report.
OAuth Scope : ZohoExpense.expensereport.CREATE

Arguments

expense_ids
string
(Required)
Comma-separated list of expense IDs to attach to the report (max 200).

Path Parameters

expense_report_id
string
(Required)
Unique identifier of the report.

Headers

X-com-zoho-expense-organizationid
string
(Required)
ID of the organization

Request Example

Click to copy
parameters_data='{"field1":"value1","field2":"value2"}'; headers_data = Map(); headers_data.put("X-com-zoho-expense-organizationid", "10234695"); headers_data.put("Authorization", "Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f"); response = invokeUrl [ url: "https://www.zohoapis.com/expense/v1/expensereports/16367000000081005/addexpenses" type: POST headers: headers_data content-type: application/json parameters: parameters_data connection: <connection_name> ]; info response;
OkHttpClient client = new OkHttpClient(); MediaType mediaType = MediaType.parse("application/json"); RequestBody body = RequestBody.create(mediaType, "{\"field1\":\"value1\",\"field2\":\"value2\"}"); Request request = new Request.Builder() .url("https://www.zohoapis.com/expense/v1/expensereports/16367000000081005/addexpenses") .post(body) .addHeader("X-com-zoho-expense-organizationid", "10234695") .addHeader("Authorization", "Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f") .addHeader("content-type", "application/json") .build(); Response response = client.newCall(request).execute();
const options = { method: 'POST', headers: { 'X-com-zoho-expense-organizationid': '10234695', Authorization: 'Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f', 'content-type': 'application/json' }, body: '{"field1":"value1","field2":"value2"}' }; fetch('https://www.zohoapis.com/expense/v1/expensereports/16367000000081005/addexpenses', options) .then(response => response.json()) .then(response => console.log(response)) .catch(err => console.error(err));
import http.client conn = http.client.HTTPSConnection("www.zohoapis.com") payload = "{\"field1\":\"value1\",\"field2\":\"value2\"}" headers = { 'X-com-zoho-expense-organizationid': "10234695", 'Authorization': "Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f", 'content-type': "application/json" } conn.request("POST", "/expense/v1/expensereports/16367000000081005/addexpenses", payload, headers) res = conn.getresponse() data = res.read() print(data.decode("utf-8"))
const http = require("https"); const options = { "method": "POST", "hostname": "www.zohoapis.com", "port": null, "path": "/expense/v1/expensereports/16367000000081005/addexpenses", "headers": { "X-com-zoho-expense-organizationid": "10234695", "Authorization": "Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f", "content-type": "application/json" } }; const req = http.request(options, function (res) { const chunks = []; res.on("data", function (chunk) { chunks.push(chunk); }); res.on("end", function () { const body = Buffer.concat(chunks); console.log(body.toString()); }); }); req.write(JSON.stringify({field1: 'value1', field2: 'value2'})); req.end();
curl --request POST \ --url https://www.zohoapis.com/expense/v1/expensereports/16367000000081005/addexpenses \ --header 'Authorization: Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f' \ --header 'X-com-zoho-expense-organizationid: 10234695' \ --header 'content-type: application/json' \ --data '{"field1":"value1","field2":"value2"}'

Body Parameters

Click to copy
{ "expense_ids": "16367000000089001,16367000000089002,16367000000089003" }

Response Example

{ "code": 0, "message": "The selected expenses have been added to the report successfully." }

Remove expenses from a report AI Tools

Open in ChatGPT

Open in ChatGPT to ask questions about this page

Open in Claude

Open in Claude to ask questions about this page

Copy as Markdown

Copy this page as markdown to use with AI assistants

View as Markdown

Open this page as markdown in a new tab

Detach one or more expenses from a report.
OAuth Scope : ZohoExpense.expensereport.CREATE

Arguments

expense_ids
string
(Required)
Comma-separated list of expense IDs to detach from the report (max 200).

Path Parameters

expense_report_id
string
(Required)
Unique identifier of the report.

Headers

X-com-zoho-expense-organizationid
string
(Required)
ID of the organization

Request Example

Click to copy
parameters_data='{"field1":"value1","field2":"value2"}'; headers_data = Map(); headers_data.put("X-com-zoho-expense-organizationid", "10234695"); headers_data.put("Authorization", "Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f"); response = invokeUrl [ url: "https://www.zohoapis.com/expense/v1/expensereports/16367000000081005/removeexpenses" type: POST headers: headers_data content-type: application/json parameters: parameters_data connection: <connection_name> ]; info response;
OkHttpClient client = new OkHttpClient(); MediaType mediaType = MediaType.parse("application/json"); RequestBody body = RequestBody.create(mediaType, "{\"field1\":\"value1\",\"field2\":\"value2\"}"); Request request = new Request.Builder() .url("https://www.zohoapis.com/expense/v1/expensereports/16367000000081005/removeexpenses") .post(body) .addHeader("X-com-zoho-expense-organizationid", "10234695") .addHeader("Authorization", "Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f") .addHeader("content-type", "application/json") .build(); Response response = client.newCall(request).execute();
const options = { method: 'POST', headers: { 'X-com-zoho-expense-organizationid': '10234695', Authorization: 'Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f', 'content-type': 'application/json' }, body: '{"field1":"value1","field2":"value2"}' }; fetch('https://www.zohoapis.com/expense/v1/expensereports/16367000000081005/removeexpenses', options) .then(response => response.json()) .then(response => console.log(response)) .catch(err => console.error(err));
import http.client conn = http.client.HTTPSConnection("www.zohoapis.com") payload = "{\"field1\":\"value1\",\"field2\":\"value2\"}" headers = { 'X-com-zoho-expense-organizationid': "10234695", 'Authorization': "Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f", 'content-type': "application/json" } conn.request("POST", "/expense/v1/expensereports/16367000000081005/removeexpenses", payload, headers) res = conn.getresponse() data = res.read() print(data.decode("utf-8"))
const http = require("https"); const options = { "method": "POST", "hostname": "www.zohoapis.com", "port": null, "path": "/expense/v1/expensereports/16367000000081005/removeexpenses", "headers": { "X-com-zoho-expense-organizationid": "10234695", "Authorization": "Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f", "content-type": "application/json" } }; const req = http.request(options, function (res) { const chunks = []; res.on("data", function (chunk) { chunks.push(chunk); }); res.on("end", function () { const body = Buffer.concat(chunks); console.log(body.toString()); }); }); req.write(JSON.stringify({field1: 'value1', field2: 'value2'})); req.end();
curl --request POST \ --url https://www.zohoapis.com/expense/v1/expensereports/16367000000081005/removeexpenses \ --header 'Authorization: Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f' \ --header 'X-com-zoho-expense-organizationid: 10234695' \ --header 'content-type: application/json' \ --data '{"field1":"value1","field2":"value2"}'

Body Parameters

Click to copy
{ "expense_ids": "16367000000089001,16367000000089002" }

Response Example

{ "code": 0, "message": "The selected expenses have been removed from the report successfully." }

Upload attachment(s) to a report AI Tools

Open in ChatGPT

Open in ChatGPT to ask questions about this page

Open in Claude

Open in Claude to ask questions about this page

Copy as Markdown

Copy this page as markdown to use with AI assistants

View as Markdown

Open this page as markdown in a new tab

Upload one or more attachments to a report. Supports common file types up to 10 MB each, with a max of 20 files per request.
OAuth Scope : ZohoExpense.expensereport.CREATE

Arguments

attachment
array
File(s) to upload. Up to 20 files per request, 10 MB each. Allowed types include common image, document, and archive formats.
doc
string
Optional JSON metadata describing the upload.
totalFiles
integer
Total number of files being uploaded in this request.
document_ids
string
Comma-separated list of existing document IDs to associate with this upload (max 10).
is_multi_page
boolean
Set to true if the uploaded file represents a multi-page receipt.

Path Parameters

expense_report_id
string
(Required)
Unique identifier of the report.

Headers

X-com-zoho-expense-organizationid
string
(Required)
ID of the organization

Request Example

Click to copy
parameters_data = Map(); parameters_data.put("field1", "value1") parameters_data.put("field2", "value2") headers_data = Map(); headers_data.put("X-com-zoho-expense-organizationid", "10234695"); headers_data.put("Authorization", "Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f"); response = invokeUrl [ url: "https://www.zohoapis.com/expense/v1/expensereports/16367000000081005/documents" type: POST headers: headers_data parameters: parameters_data connection: <connection_name> ]; info response;
OkHttpClient client = new OkHttpClient(); MediaType mediaType = MediaType.parse("multipart/form-data; boundary=---011000010111000001101001"); RequestBody body = RequestBody.create(mediaType, "-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"field1\"\r\n\r\nvalue1\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"field2\"\r\n\r\nvalue2\r\n-----011000010111000001101001--\r\n"); Request request = new Request.Builder() .url("https://www.zohoapis.com/expense/v1/expensereports/16367000000081005/documents") .post(body) .addHeader("X-com-zoho-expense-organizationid", "10234695") .addHeader("Authorization", "Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f") .addHeader("content-type", "multipart/form-data; boundary=---011000010111000001101001") .build(); Response response = client.newCall(request).execute();
const form = new FormData(); form.append("field1", "value1"); form.append("field2", "value2"); const options = { method: 'POST', headers: { 'X-com-zoho-expense-organizationid': '10234695', Authorization: 'Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f', 'content-type': 'multipart/form-data; boundary=---011000010111000001101001' } }; options.body = form; fetch('https://www.zohoapis.com/expense/v1/expensereports/16367000000081005/documents', options) .then(response => response.json()) .then(response => console.log(response)) .catch(err => console.error(err));
import http.client conn = http.client.HTTPSConnection("www.zohoapis.com") payload = "-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"field1\"\r\n\r\nvalue1\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"field2\"\r\n\r\nvalue2\r\n-----011000010111000001101001--\r\n" headers = { 'X-com-zoho-expense-organizationid': "10234695", 'Authorization': "Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f", 'content-type': "multipart/form-data; boundary=---011000010111000001101001" } conn.request("POST", "/expense/v1/expensereports/16367000000081005/documents", payload, headers) res = conn.getresponse() data = res.read() print(data.decode("utf-8"))
const http = require("https"); const options = { "method": "POST", "hostname": "www.zohoapis.com", "port": null, "path": "/expense/v1/expensereports/16367000000081005/documents", "headers": { "X-com-zoho-expense-organizationid": "10234695", "Authorization": "Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f", "content-type": "multipart/form-data; boundary=---011000010111000001101001" } }; const req = http.request(options, function (res) { const chunks = []; res.on("data", function (chunk) { chunks.push(chunk); }); res.on("end", function () { const body = Buffer.concat(chunks); console.log(body.toString()); }); }); req.write("-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"field1\"\r\n\r\nvalue1\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"field2\"\r\n\r\nvalue2\r\n-----011000010111000001101001--\r\n"); req.end();
curl --request POST \ --url https://www.zohoapis.com/expense/v1/expensereports/16367000000081005/documents \ --header 'Authorization: Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f' \ --header 'X-com-zoho-expense-organizationid: 10234695' \ --header 'content-type: multipart/form-data' \ --form field1=value1 \ --form field2=value2

Body Parameters

Click to copy
{ "attachment": [ "string" ], "doc": "string", "totalFiles": 1, "document_ids": "16367000000093001", "is_multi_page": false }

Response Example

{ "code": 0, "message": "Attachment has been uploaded successfully." }

Retrieve an attachment of a report AI Tools

Open in ChatGPT

Open in ChatGPT to ask questions about this page

Open in Claude

Open in Claude to ask questions about this page

Copy as Markdown

Copy this page as markdown to use with AI assistants

View as Markdown

Open this page as markdown in a new tab

Download a specific attachment file associated with a report.
OAuth Scope : ZohoExpense.expensereport.READ

Path Parameters

expense_report_id
string
(Required)
Unique identifier of the report.
document_id
string
(Required)
Unique identifier of the attachment document.

Query Parameters

image_size
string
Render size for image attachments.
print
boolean
When true, returns the file optimized for printing.
inline
boolean
When true, returns the file inline (display) instead of as an attachment download.

Headers

X-com-zoho-expense-organizationid
string
(Required)
ID of the organization

Request Example

Click to copy
headers_data = Map(); headers_data.put("X-com-zoho-expense-organizationid", "10234695"); headers_data.put("Authorization", "Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f"); response = invokeUrl [ url: "https://www.zohoapis.com/expense/v1/expensereports/16367000000081005/documents/16367000000093001" type: GET headers: headers_data connection: <connection_name> ]; info response;
OkHttpClient client = new OkHttpClient(); Request request = new Request.Builder() .url("https://www.zohoapis.com/expense/v1/expensereports/16367000000081005/documents/16367000000093001") .get() .addHeader("X-com-zoho-expense-organizationid", "10234695") .addHeader("Authorization", "Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f") .build(); Response response = client.newCall(request).execute();
const options = { method: 'GET', headers: { 'X-com-zoho-expense-organizationid': '10234695', Authorization: 'Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f' } }; fetch('https://www.zohoapis.com/expense/v1/expensereports/16367000000081005/documents/16367000000093001', options) .then(response => response.json()) .then(response => console.log(response)) .catch(err => console.error(err));
import http.client conn = http.client.HTTPSConnection("www.zohoapis.com") headers = { 'X-com-zoho-expense-organizationid': "10234695", 'Authorization': "Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f" } conn.request("GET", "/expense/v1/expensereports/16367000000081005/documents/16367000000093001", headers=headers) res = conn.getresponse() data = res.read() print(data.decode("utf-8"))
const http = require("https"); const options = { "method": "GET", "hostname": "www.zohoapis.com", "port": null, "path": "/expense/v1/expensereports/16367000000081005/documents/16367000000093001", "headers": { "X-com-zoho-expense-organizationid": "10234695", "Authorization": "Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f" } }; const req = http.request(options, function (res) { const chunks = []; res.on("data", function (chunk) { chunks.push(chunk); }); res.on("end", function () { const body = Buffer.concat(chunks); console.log(body.toString()); }); }); req.end();
curl --request GET \ --url https://www.zohoapis.com/expense/v1/expensereports/16367000000081005/documents/16367000000093001 \ --header 'Authorization: Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f' \ --header 'X-com-zoho-expense-organizationid: 10234695'

Response Example

{ "code": 0, "message": "success" }

Delete an attachment of a report AI Tools

Open in ChatGPT

Open in ChatGPT to ask questions about this page

Open in Claude

Open in Claude to ask questions about this page

Copy as Markdown

Copy this page as markdown to use with AI assistants

View as Markdown

Open this page as markdown in a new tab

Delete a specific attachment from a report. Set `unassociate=true` to detach the file from the report without deleting it.
OAuth Scope : ZohoExpense.expensereport.DELETE

Path Parameters

expense_report_id
string
(Required)
Unique identifier of the report.
document_id
string
(Required)
Unique identifier of the attachment document.

Query Parameters

unassociate
boolean
When true, the document is detached from the report but not deleted.

Headers

X-com-zoho-expense-organizationid
string
(Required)
ID of the organization

Request Example

Click to copy
headers_data = Map(); headers_data.put("X-com-zoho-expense-organizationid", "10234695"); headers_data.put("Authorization", "Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f"); response = invokeUrl [ url: "https://www.zohoapis.com/expense/v1/expensereports/16367000000081005/documents/16367000000093001" type: DELETE headers: headers_data connection: <connection_name> ]; info response;
OkHttpClient client = new OkHttpClient(); Request request = new Request.Builder() .url("https://www.zohoapis.com/expense/v1/expensereports/16367000000081005/documents/16367000000093001") .delete(null) .addHeader("X-com-zoho-expense-organizationid", "10234695") .addHeader("Authorization", "Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f") .build(); Response response = client.newCall(request).execute();
const options = { method: 'DELETE', headers: { 'X-com-zoho-expense-organizationid': '10234695', Authorization: 'Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f' } }; fetch('https://www.zohoapis.com/expense/v1/expensereports/16367000000081005/documents/16367000000093001', options) .then(response => response.json()) .then(response => console.log(response)) .catch(err => console.error(err));
import http.client conn = http.client.HTTPSConnection("www.zohoapis.com") headers = { 'X-com-zoho-expense-organizationid': "10234695", 'Authorization': "Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f" } conn.request("DELETE", "/expense/v1/expensereports/16367000000081005/documents/16367000000093001", headers=headers) res = conn.getresponse() data = res.read() print(data.decode("utf-8"))
const http = require("https"); const options = { "method": "DELETE", "hostname": "www.zohoapis.com", "port": null, "path": "/expense/v1/expensereports/16367000000081005/documents/16367000000093001", "headers": { "X-com-zoho-expense-organizationid": "10234695", "Authorization": "Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f" } }; const req = http.request(options, function (res) { const chunks = []; res.on("data", function (chunk) { chunks.push(chunk); }); res.on("end", function () { const body = Buffer.concat(chunks); console.log(body.toString()); }); }); req.end();
curl --request DELETE \ --url https://www.zohoapis.com/expense/v1/expensereports/16367000000081005/documents/16367000000093001 \ --header 'Authorization: Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f' \ --header 'X-com-zoho-expense-organizationid: 10234695'

Response Example

{ "code": 0, "message": "Attachment has been deleted successfully." }

Re-upload an attachment of a report AI Tools

Open in ChatGPT

Open in ChatGPT to ask questions about this page

Open in Claude

Open in Claude to ask questions about this page

Copy as Markdown

Copy this page as markdown to use with AI assistants

View as Markdown

Open this page as markdown in a new tab

Replace the contents of an existing attachment, optionally sourcing the new file from a cloud provider.
OAuth Scope : ZohoExpense.expensereport.CREATE

Arguments

folderId
string
Folder identifier when re-uploading from a cloud source.
docName
string
New document name (max 5000 chars).
source
string
Cloud source identifier (e.g. drive, dropbox).
doc
string
Optional JSON metadata describing the re-upload.

Path Parameters

expense_report_id
string
(Required)
Unique identifier of the report.
document_id
string
(Required)
Unique identifier of the attachment document.

Headers

X-com-zoho-expense-organizationid
string
(Required)
ID of the organization

Request Example

Click to copy
parameters_data='{"field1":"value1","field2":"value2"}'; headers_data = Map(); headers_data.put("X-com-zoho-expense-organizationid", "10234695"); headers_data.put("Authorization", "Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f"); response = invokeUrl [ url: "https://www.zohoapis.com/expense/v1/expensereports/16367000000081005/documents/16367000000093001/upload" type: POST headers: headers_data content-type: application/json parameters: parameters_data connection: <connection_name> ]; info response;
OkHttpClient client = new OkHttpClient(); MediaType mediaType = MediaType.parse("application/json"); RequestBody body = RequestBody.create(mediaType, "{\"field1\":\"value1\",\"field2\":\"value2\"}"); Request request = new Request.Builder() .url("https://www.zohoapis.com/expense/v1/expensereports/16367000000081005/documents/16367000000093001/upload") .post(body) .addHeader("X-com-zoho-expense-organizationid", "10234695") .addHeader("Authorization", "Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f") .addHeader("content-type", "application/json") .build(); Response response = client.newCall(request).execute();
const options = { method: 'POST', headers: { 'X-com-zoho-expense-organizationid': '10234695', Authorization: 'Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f', 'content-type': 'application/json' }, body: '{"field1":"value1","field2":"value2"}' }; fetch('https://www.zohoapis.com/expense/v1/expensereports/16367000000081005/documents/16367000000093001/upload', options) .then(response => response.json()) .then(response => console.log(response)) .catch(err => console.error(err));
import http.client conn = http.client.HTTPSConnection("www.zohoapis.com") payload = "{\"field1\":\"value1\",\"field2\":\"value2\"}" headers = { 'X-com-zoho-expense-organizationid': "10234695", 'Authorization': "Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f", 'content-type': "application/json" } conn.request("POST", "/expense/v1/expensereports/16367000000081005/documents/16367000000093001/upload", payload, headers) res = conn.getresponse() data = res.read() print(data.decode("utf-8"))
const http = require("https"); const options = { "method": "POST", "hostname": "www.zohoapis.com", "port": null, "path": "/expense/v1/expensereports/16367000000081005/documents/16367000000093001/upload", "headers": { "X-com-zoho-expense-organizationid": "10234695", "Authorization": "Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f", "content-type": "application/json" } }; const req = http.request(options, function (res) { const chunks = []; res.on("data", function (chunk) { chunks.push(chunk); }); res.on("end", function () { const body = Buffer.concat(chunks); console.log(body.toString()); }); }); req.write(JSON.stringify({field1: 'value1', field2: 'value2'})); req.end();
curl --request POST \ --url https://www.zohoapis.com/expense/v1/expensereports/16367000000081005/documents/16367000000093001/upload \ --header 'Authorization: Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f' \ --header 'X-com-zoho-expense-organizationid: 10234695' \ --header 'content-type: application/json' \ --data '{"field1":"value1","field2":"value2"}'

Body Parameters

Click to copy
{ "folderId": "string", "docName": "string", "source": "drive", "doc": "string" }

Response Example

{ "code": 0, "message": "Attachment has been re-uploaded successfully." }

Remove advance payments from a report AI Tools

Open in ChatGPT

Open in ChatGPT to ask questions about this page

Open in Claude

Open in Claude to ask questions about this page

Copy as Markdown

Copy this page as markdown to use with AI assistants

View as Markdown

Open this page as markdown in a new tab

Detach one or more advance payments from a report.
OAuth Scope : ZohoExpense.expensereport.CREATE

Arguments

advance_payment_ids
string
(Required)
Comma-separated list of advance payment IDs to detach from the report (max 200).

Path Parameters

expense_report_id
string
(Required)
Unique identifier of the report.

Headers

X-com-zoho-expense-organizationid
string
(Required)
ID of the organization

Request Example

Click to copy
parameters_data='{"field1":"value1","field2":"value2"}'; headers_data = Map(); headers_data.put("X-com-zoho-expense-organizationid", "10234695"); headers_data.put("Authorization", "Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f"); response = invokeUrl [ url: "https://www.zohoapis.com/expense/v1/expensereports/16367000000081005/removeadvancepayment" type: POST headers: headers_data content-type: application/json parameters: parameters_data connection: <connection_name> ]; info response;
OkHttpClient client = new OkHttpClient(); MediaType mediaType = MediaType.parse("application/json"); RequestBody body = RequestBody.create(mediaType, "{\"field1\":\"value1\",\"field2\":\"value2\"}"); Request request = new Request.Builder() .url("https://www.zohoapis.com/expense/v1/expensereports/16367000000081005/removeadvancepayment") .post(body) .addHeader("X-com-zoho-expense-organizationid", "10234695") .addHeader("Authorization", "Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f") .addHeader("content-type", "application/json") .build(); Response response = client.newCall(request).execute();
const options = { method: 'POST', headers: { 'X-com-zoho-expense-organizationid': '10234695', Authorization: 'Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f', 'content-type': 'application/json' }, body: '{"field1":"value1","field2":"value2"}' }; fetch('https://www.zohoapis.com/expense/v1/expensereports/16367000000081005/removeadvancepayment', options) .then(response => response.json()) .then(response => console.log(response)) .catch(err => console.error(err));
import http.client conn = http.client.HTTPSConnection("www.zohoapis.com") payload = "{\"field1\":\"value1\",\"field2\":\"value2\"}" headers = { 'X-com-zoho-expense-organizationid': "10234695", 'Authorization': "Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f", 'content-type': "application/json" } conn.request("POST", "/expense/v1/expensereports/16367000000081005/removeadvancepayment", payload, headers) res = conn.getresponse() data = res.read() print(data.decode("utf-8"))
const http = require("https"); const options = { "method": "POST", "hostname": "www.zohoapis.com", "port": null, "path": "/expense/v1/expensereports/16367000000081005/removeadvancepayment", "headers": { "X-com-zoho-expense-organizationid": "10234695", "Authorization": "Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f", "content-type": "application/json" } }; const req = http.request(options, function (res) { const chunks = []; res.on("data", function (chunk) { chunks.push(chunk); }); res.on("end", function () { const body = Buffer.concat(chunks); console.log(body.toString()); }); }); req.write(JSON.stringify({field1: 'value1', field2: 'value2'})); req.end();
curl --request POST \ --url https://www.zohoapis.com/expense/v1/expensereports/16367000000081005/removeadvancepayment \ --header 'Authorization: Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f' \ --header 'X-com-zoho-expense-organizationid: 10234695' \ --header 'content-type: application/json' \ --data '{"field1":"value1","field2":"value2"}'

Body Parameters

Click to copy
{ "advance_payment_ids": "16367000000094001,16367000000094002" }

Response Example

{ "code": 0, "message": "Advance payments have been removed successfully." }

Retrieve the budget summary of a report AI Tools

Open in ChatGPT

Open in ChatGPT to ask questions about this page

Open in Claude

Open in Claude to ask questions about this page

Copy as Markdown

Copy this page as markdown to use with AI assistants

View as Markdown

Open this page as markdown in a new tab

Retrieve the budget vs. actual summary for a report.
OAuth Scope : ZohoExpense.expensereport.READ

Path Parameters

expense_report_id
string
(Required)
Unique identifier of the report.

Headers

X-com-zoho-expense-organizationid
string
(Required)
ID of the organization

Request Example

Click to copy
headers_data = Map(); headers_data.put("X-com-zoho-expense-organizationid", "10234695"); headers_data.put("Authorization", "Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f"); response = invokeUrl [ url: "https://www.zohoapis.com/expense/v1/expensereports/16367000000081005/budgetsummary" type: GET headers: headers_data connection: <connection_name> ]; info response;
OkHttpClient client = new OkHttpClient(); Request request = new Request.Builder() .url("https://www.zohoapis.com/expense/v1/expensereports/16367000000081005/budgetsummary") .get() .addHeader("X-com-zoho-expense-organizationid", "10234695") .addHeader("Authorization", "Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f") .build(); Response response = client.newCall(request).execute();
const options = { method: 'GET', headers: { 'X-com-zoho-expense-organizationid': '10234695', Authorization: 'Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f' } }; fetch('https://www.zohoapis.com/expense/v1/expensereports/16367000000081005/budgetsummary', options) .then(response => response.json()) .then(response => console.log(response)) .catch(err => console.error(err));
import http.client conn = http.client.HTTPSConnection("www.zohoapis.com") headers = { 'X-com-zoho-expense-organizationid': "10234695", 'Authorization': "Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f" } conn.request("GET", "/expense/v1/expensereports/16367000000081005/budgetsummary", headers=headers) res = conn.getresponse() data = res.read() print(data.decode("utf-8"))
const http = require("https"); const options = { "method": "GET", "hostname": "www.zohoapis.com", "port": null, "path": "/expense/v1/expensereports/16367000000081005/budgetsummary", "headers": { "X-com-zoho-expense-organizationid": "10234695", "Authorization": "Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f" } }; const req = http.request(options, function (res) { const chunks = []; res.on("data", function (chunk) { chunks.push(chunk); }); res.on("end", function () { const body = Buffer.concat(chunks); console.log(body.toString()); }); }); req.end();
curl --request GET \ --url https://www.zohoapis.com/expense/v1/expensereports/16367000000081005/budgetsummary \ --header 'Authorization: Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f' \ --header 'X-com-zoho-expense-organizationid: 10234695'

Response Example

{ "code": 0, "message": "success", "budget_summary": { "budget_amount": 5000, "actual_amount": 4250.5, "variance": 749.5 } }

Retrieve the reimbursement details of a report AI Tools

Open in ChatGPT

Open in ChatGPT to ask questions about this page

Open in Claude

Open in Claude to ask questions about this page

Copy as Markdown

Copy this page as markdown to use with AI assistants

View as Markdown

Open this page as markdown in a new tab

Retrieve the reimbursement details associated with a report.
OAuth Scope : ZohoExpense.reimbursement.CREATE

Path Parameters

expense_report_id
string
(Required)
Unique identifier of the report.

Headers

X-com-zoho-expense-organizationid
string
(Required)
ID of the organization

Request Example

Click to copy
headers_data = Map(); headers_data.put("X-com-zoho-expense-organizationid", "10234695"); headers_data.put("Authorization", "Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f"); response = invokeUrl [ url: "https://www.zohoapis.com/expense/v1/expensereports/16367000000081005/reimbursement" type: GET headers: headers_data connection: <connection_name> ]; info response;
OkHttpClient client = new OkHttpClient(); Request request = new Request.Builder() .url("https://www.zohoapis.com/expense/v1/expensereports/16367000000081005/reimbursement") .get() .addHeader("X-com-zoho-expense-organizationid", "10234695") .addHeader("Authorization", "Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f") .build(); Response response = client.newCall(request).execute();
const options = { method: 'GET', headers: { 'X-com-zoho-expense-organizationid': '10234695', Authorization: 'Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f' } }; fetch('https://www.zohoapis.com/expense/v1/expensereports/16367000000081005/reimbursement', options) .then(response => response.json()) .then(response => console.log(response)) .catch(err => console.error(err));
import http.client conn = http.client.HTTPSConnection("www.zohoapis.com") headers = { 'X-com-zoho-expense-organizationid': "10234695", 'Authorization': "Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f" } conn.request("GET", "/expense/v1/expensereports/16367000000081005/reimbursement", headers=headers) res = conn.getresponse() data = res.read() print(data.decode("utf-8"))
const http = require("https"); const options = { "method": "GET", "hostname": "www.zohoapis.com", "port": null, "path": "/expense/v1/expensereports/16367000000081005/reimbursement", "headers": { "X-com-zoho-expense-organizationid": "10234695", "Authorization": "Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f" } }; const req = http.request(options, function (res) { const chunks = []; res.on("data", function (chunk) { chunks.push(chunk); }); res.on("end", function () { const body = Buffer.concat(chunks); console.log(body.toString()); }); }); req.end();
curl --request GET \ --url https://www.zohoapis.com/expense/v1/expensereports/16367000000081005/reimbursement \ --header 'Authorization: Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f' \ --header 'X-com-zoho-expense-organizationid: 10234695'

Response Example

{ "code": 0, "message": "success", "reimbursement": { "reimbursement_id": "16367000000095001", "status": "reimbursed", "amount": 4250.5, "reimbursed_date": "2026-05-15" } }

Change the status of a report AI Tools

Open in ChatGPT

Open in ChatGPT to ask questions about this page

Open in Claude

Open in Claude to ask questions about this page

Copy as Markdown

Copy this page as markdown to use with AI assistants

View as Markdown

Open this page as markdown in a new tab

Apply a generic status change action to a report.
OAuth Scope : ZohoExpense.expensereport.CREATE

Path Parameters

expense_report_id
string
(Required)
Unique identifier of the report.
action
string
(Required)
Status action token (lowercase, e.g. submitted, approved).

Headers

X-com-zoho-expense-organizationid
string
(Required)
ID of the organization

Request Example

Click to copy
headers_data = Map(); headers_data.put("X-com-zoho-expense-organizationid", "10234695"); headers_data.put("Authorization", "Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f"); response = invokeUrl [ url: "https://www.zohoapis.com/expense/v1/expensereports/16367000000081005/status/approved" type: POST headers: headers_data connection: <connection_name> ]; info response;
OkHttpClient client = new OkHttpClient(); Request request = new Request.Builder() .url("https://www.zohoapis.com/expense/v1/expensereports/16367000000081005/status/approved") .post(null) .addHeader("X-com-zoho-expense-organizationid", "10234695") .addHeader("Authorization", "Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f") .build(); Response response = client.newCall(request).execute();
const options = { method: 'POST', headers: { 'X-com-zoho-expense-organizationid': '10234695', Authorization: 'Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f' } }; fetch('https://www.zohoapis.com/expense/v1/expensereports/16367000000081005/status/approved', options) .then(response => response.json()) .then(response => console.log(response)) .catch(err => console.error(err));
import http.client conn = http.client.HTTPSConnection("www.zohoapis.com") headers = { 'X-com-zoho-expense-organizationid': "10234695", 'Authorization': "Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f" } conn.request("POST", "/expense/v1/expensereports/16367000000081005/status/approved", headers=headers) res = conn.getresponse() data = res.read() print(data.decode("utf-8"))
const http = require("https"); const options = { "method": "POST", "hostname": "www.zohoapis.com", "port": null, "path": "/expense/v1/expensereports/16367000000081005/status/approved", "headers": { "X-com-zoho-expense-organizationid": "10234695", "Authorization": "Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f" } }; const req = http.request(options, function (res) { const chunks = []; res.on("data", function (chunk) { chunks.push(chunk); }); res.on("end", function () { const body = Buffer.concat(chunks); console.log(body.toString()); }); }); req.end();
curl --request POST \ --url https://www.zohoapis.com/expense/v1/expensereports/16367000000081005/status/approved \ --header 'Authorization: Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f' \ --header 'X-com-zoho-expense-organizationid: 10234695'

Response Example

{ "code": 0, "message": "Status has been updated successfully." }

Export a report AI Tools

Open in ChatGPT

Open in ChatGPT to ask questions about this page

Open in Claude

Open in Claude to ask questions about this page

Copy as Markdown

Copy this page as markdown to use with AI assistants

View as Markdown

Open this page as markdown in a new tab

Trigger an asynchronous export of a report.
OAuth Scope : ZohoExpense.orgsettings.CREATE

Path Parameters

expense_report_id
string
(Required)
Unique identifier of the report.

Headers

X-com-zoho-expense-organizationid
string
(Required)
ID of the organization

Request Example

Click to copy
headers_data = Map(); headers_data.put("X-com-zoho-expense-organizationid", "10234695"); headers_data.put("Authorization", "Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f"); response = invokeUrl [ url: "https://www.zohoapis.com/expense/v1/expensereports/16367000000081005/export" type: POST headers: headers_data connection: <connection_name> ]; info response;
OkHttpClient client = new OkHttpClient(); Request request = new Request.Builder() .url("https://www.zohoapis.com/expense/v1/expensereports/16367000000081005/export") .post(null) .addHeader("X-com-zoho-expense-organizationid", "10234695") .addHeader("Authorization", "Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f") .build(); Response response = client.newCall(request).execute();
const options = { method: 'POST', headers: { 'X-com-zoho-expense-organizationid': '10234695', Authorization: 'Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f' } }; fetch('https://www.zohoapis.com/expense/v1/expensereports/16367000000081005/export', options) .then(response => response.json()) .then(response => console.log(response)) .catch(err => console.error(err));
import http.client conn = http.client.HTTPSConnection("www.zohoapis.com") headers = { 'X-com-zoho-expense-organizationid': "10234695", 'Authorization': "Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f" } conn.request("POST", "/expense/v1/expensereports/16367000000081005/export", headers=headers) res = conn.getresponse() data = res.read() print(data.decode("utf-8"))
const http = require("https"); const options = { "method": "POST", "hostname": "www.zohoapis.com", "port": null, "path": "/expense/v1/expensereports/16367000000081005/export", "headers": { "X-com-zoho-expense-organizationid": "10234695", "Authorization": "Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f" } }; const req = http.request(options, function (res) { const chunks = []; res.on("data", function (chunk) { chunks.push(chunk); }); res.on("end", function () { const body = Buffer.concat(chunks); console.log(body.toString()); }); }); req.end();
curl --request POST \ --url https://www.zohoapis.com/expense/v1/expensereports/16367000000081005/export \ --header 'Authorization: Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f' \ --header 'X-com-zoho-expense-organizationid: 10234695'

Response Example

{ "code": 0, "message": "Export started.", "export_id": "16367000000096001" }

Cancel a reimbursement of a report AI Tools

Open in ChatGPT

Open in ChatGPT to ask questions about this page

Open in Claude

Open in Claude to ask questions about this page

Copy as Markdown

Copy this page as markdown to use with AI assistants

View as Markdown

Open this page as markdown in a new tab

Cancel a previously recorded reimbursement on a report.
OAuth Scope : ZohoExpense.reimbursement.CREATE

Path Parameters

expense_report_id
string
(Required)
Unique identifier of the report.

Headers

X-com-zoho-expense-organizationid
string
(Required)
ID of the organization

Request Example

Click to copy
headers_data = Map(); headers_data.put("X-com-zoho-expense-organizationid", "10234695"); headers_data.put("Authorization", "Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f"); response = invokeUrl [ url: "https://www.zohoapis.com/expense/v1/expensereports/16367000000081005/reimburse/cancel" type: POST headers: headers_data connection: <connection_name> ]; info response;
OkHttpClient client = new OkHttpClient(); Request request = new Request.Builder() .url("https://www.zohoapis.com/expense/v1/expensereports/16367000000081005/reimburse/cancel") .post(null) .addHeader("X-com-zoho-expense-organizationid", "10234695") .addHeader("Authorization", "Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f") .build(); Response response = client.newCall(request).execute();
const options = { method: 'POST', headers: { 'X-com-zoho-expense-organizationid': '10234695', Authorization: 'Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f' } }; fetch('https://www.zohoapis.com/expense/v1/expensereports/16367000000081005/reimburse/cancel', options) .then(response => response.json()) .then(response => console.log(response)) .catch(err => console.error(err));
import http.client conn = http.client.HTTPSConnection("www.zohoapis.com") headers = { 'X-com-zoho-expense-organizationid': "10234695", 'Authorization': "Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f" } conn.request("POST", "/expense/v1/expensereports/16367000000081005/reimburse/cancel", headers=headers) res = conn.getresponse() data = res.read() print(data.decode("utf-8"))
const http = require("https"); const options = { "method": "POST", "hostname": "www.zohoapis.com", "port": null, "path": "/expense/v1/expensereports/16367000000081005/reimburse/cancel", "headers": { "X-com-zoho-expense-organizationid": "10234695", "Authorization": "Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f" } }; const req = http.request(options, function (res) { const chunks = []; res.on("data", function (chunk) { chunks.push(chunk); }); res.on("end", function () { const body = Buffer.concat(chunks); console.log(body.toString()); }); }); req.end();
curl --request POST \ --url https://www.zohoapis.com/expense/v1/expensereports/16367000000081005/reimburse/cancel \ --header 'Authorization: Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f' \ --header 'X-com-zoho-expense-organizationid: 10234695'

Response Example

{ "code": 0, "message": "Reimbursement has been cancelled successfully." }

Add an expense to a report AI Tools

Open in ChatGPT

Open in ChatGPT to ask questions about this page

Open in Claude

Open in Claude to ask questions about this page

Copy as Markdown

Copy this page as markdown to use with AI assistants

View as Markdown

Open this page as markdown in a new tab

Attach a single expense to a report. Useful when the caller is operating in the context of an expense rather than a report.
OAuth Scope : ZohoExpense.expensereport.CREATE

Arguments

report_id
string
(Required)
Unique identifier of the report the expense should be attached to.

Path Parameters

expense_id
string
(Required)
Unique identifier of the expense.

Headers

X-com-zoho-expense-organizationid
string
(Required)
ID of the organization

Request Example

Click to copy
parameters_data='{"field1":"value1","field2":"value2"}'; headers_data = Map(); headers_data.put("X-com-zoho-expense-organizationid", "10234695"); headers_data.put("Authorization", "Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f"); response = invokeUrl [ url: "https://www.zohoapis.com/expense/v1/expenses/16367000000089001/addtoreport" type: POST headers: headers_data content-type: application/json parameters: parameters_data connection: <connection_name> ]; info response;
OkHttpClient client = new OkHttpClient(); MediaType mediaType = MediaType.parse("application/json"); RequestBody body = RequestBody.create(mediaType, "{\"field1\":\"value1\",\"field2\":\"value2\"}"); Request request = new Request.Builder() .url("https://www.zohoapis.com/expense/v1/expenses/16367000000089001/addtoreport") .post(body) .addHeader("X-com-zoho-expense-organizationid", "10234695") .addHeader("Authorization", "Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f") .addHeader("content-type", "application/json") .build(); Response response = client.newCall(request).execute();
const options = { method: 'POST', headers: { 'X-com-zoho-expense-organizationid': '10234695', Authorization: 'Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f', 'content-type': 'application/json' }, body: '{"field1":"value1","field2":"value2"}' }; fetch('https://www.zohoapis.com/expense/v1/expenses/16367000000089001/addtoreport', options) .then(response => response.json()) .then(response => console.log(response)) .catch(err => console.error(err));
import http.client conn = http.client.HTTPSConnection("www.zohoapis.com") payload = "{\"field1\":\"value1\",\"field2\":\"value2\"}" headers = { 'X-com-zoho-expense-organizationid': "10234695", 'Authorization': "Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f", 'content-type': "application/json" } conn.request("POST", "/expense/v1/expenses/16367000000089001/addtoreport", payload, headers) res = conn.getresponse() data = res.read() print(data.decode("utf-8"))
const http = require("https"); const options = { "method": "POST", "hostname": "www.zohoapis.com", "port": null, "path": "/expense/v1/expenses/16367000000089001/addtoreport", "headers": { "X-com-zoho-expense-organizationid": "10234695", "Authorization": "Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f", "content-type": "application/json" } }; const req = http.request(options, function (res) { const chunks = []; res.on("data", function (chunk) { chunks.push(chunk); }); res.on("end", function () { const body = Buffer.concat(chunks); console.log(body.toString()); }); }); req.write(JSON.stringify({field1: 'value1', field2: 'value2'})); req.end();
curl --request POST \ --url https://www.zohoapis.com/expense/v1/expenses/16367000000089001/addtoreport \ --header 'Authorization: Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f' \ --header 'X-com-zoho-expense-organizationid: 10234695' \ --header 'content-type: application/json' \ --data '{"field1":"value1","field2":"value2"}'

Body Parameters

Click to copy
{ "report_id": "16367000000081005" }

Response Example

{ "code": 0, "message": "Expense has been added to the report successfully." }

Generate a PDF for a report AI Tools

Open in ChatGPT

Open in ChatGPT to ask questions about this page

Open in Claude

Open in Claude to ask questions about this page

Copy as Markdown

Copy this page as markdown to use with AI assistants

View as Markdown

Open this page as markdown in a new tab

Generate a PDF file for one or more reports on demand.
OAuth Scope : ZohoExpense.expensereport.READ

Arguments

report_ids
string
Comma-separated list of report IDs to render as a PDF.

Headers

X-com-zoho-expense-organizationid
string
(Required)
ID of the organization

Request Example

Click to copy
parameters_data='{"field1":"value1","field2":"value2"}'; headers_data = Map(); headers_data.put("X-com-zoho-expense-organizationid", "10234695"); headers_data.put("Authorization", "Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f"); response = invokeUrl [ url: "https://www.zohoapis.com/expense/v1/expensereportgenerator/pdf" type: POST headers: headers_data content-type: application/json parameters: parameters_data connection: <connection_name> ]; info response;
OkHttpClient client = new OkHttpClient(); MediaType mediaType = MediaType.parse("application/json"); RequestBody body = RequestBody.create(mediaType, "{\"field1\":\"value1\",\"field2\":\"value2\"}"); Request request = new Request.Builder() .url("https://www.zohoapis.com/expense/v1/expensereportgenerator/pdf") .post(body) .addHeader("X-com-zoho-expense-organizationid", "10234695") .addHeader("Authorization", "Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f") .addHeader("content-type", "application/json") .build(); Response response = client.newCall(request).execute();
const options = { method: 'POST', headers: { 'X-com-zoho-expense-organizationid': '10234695', Authorization: 'Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f', 'content-type': 'application/json' }, body: '{"field1":"value1","field2":"value2"}' }; fetch('https://www.zohoapis.com/expense/v1/expensereportgenerator/pdf', options) .then(response => response.json()) .then(response => console.log(response)) .catch(err => console.error(err));
import http.client conn = http.client.HTTPSConnection("www.zohoapis.com") payload = "{\"field1\":\"value1\",\"field2\":\"value2\"}" headers = { 'X-com-zoho-expense-organizationid': "10234695", 'Authorization': "Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f", 'content-type': "application/json" } conn.request("POST", "/expense/v1/expensereportgenerator/pdf", payload, headers) res = conn.getresponse() data = res.read() print(data.decode("utf-8"))
const http = require("https"); const options = { "method": "POST", "hostname": "www.zohoapis.com", "port": null, "path": "/expense/v1/expensereportgenerator/pdf", "headers": { "X-com-zoho-expense-organizationid": "10234695", "Authorization": "Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f", "content-type": "application/json" } }; const req = http.request(options, function (res) { const chunks = []; res.on("data", function (chunk) { chunks.push(chunk); }); res.on("end", function () { const body = Buffer.concat(chunks); console.log(body.toString()); }); }); req.write(JSON.stringify({field1: 'value1', field2: 'value2'})); req.end();
curl --request POST \ --url https://www.zohoapis.com/expense/v1/expensereportgenerator/pdf \ --header 'Authorization: Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f' \ --header 'X-com-zoho-expense-organizationid: 10234695' \ --header 'content-type: application/json' \ --data '{"field1":"value1","field2":"value2"}'

Body Parameters

Click to copy
{ "report_ids": "16367000000081005,16367000000081006" }

Response Example

{ "code": 0, "message": "PDF generation started.", "document_id": "16367000000097001" }

Submit multiple reports AI Tools

Open in ChatGPT

Open in ChatGPT to ask questions about this page

Open in Claude

Open in Claude to ask questions about this page

Copy as Markdown

Copy this page as markdown to use with AI assistants

View as Markdown

Open this page as markdown in a new tab

Submit multiple reports for approval in a single request by providing the organization ID and an array of report IDs. The user must select an approver to whom the reports will be submitted and can specify email addresses of recipients to be CCed on the submission notification. All selected reports must be in "draft" or "recalled" status, should have at least one expense attached, and all mandatory fields must be complete before submission can succeed.
OAuth Scope : ZohoExpense.expensereport.UPDATE

Arguments

report_ids
string
(Required)
Comma-separated list of report IDs to submit (max 25).
approver_id
string
Unique ID for the current approver.

Headers

X-com-zoho-expense-organizationid
string
(Required)
ID of the organization

Request Example

Click to copy
parameters_data='{"field1":"value1","field2":"value2"}'; headers_data = Map(); headers_data.put("X-com-zoho-expense-organizationid", "10234695"); headers_data.put("Authorization", "Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f"); response = invokeUrl [ url: "https://www.zohoapis.com/expense/v1/expensereports/submit" type: POST headers: headers_data content-type: application/json parameters: parameters_data connection: <connection_name> ]; info response;
OkHttpClient client = new OkHttpClient(); MediaType mediaType = MediaType.parse("application/json"); RequestBody body = RequestBody.create(mediaType, "{\"field1\":\"value1\",\"field2\":\"value2\"}"); Request request = new Request.Builder() .url("https://www.zohoapis.com/expense/v1/expensereports/submit") .post(body) .addHeader("X-com-zoho-expense-organizationid", "10234695") .addHeader("Authorization", "Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f") .addHeader("content-type", "application/json") .build(); Response response = client.newCall(request).execute();
const options = { method: 'POST', headers: { 'X-com-zoho-expense-organizationid': '10234695', Authorization: 'Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f', 'content-type': 'application/json' }, body: '{"field1":"value1","field2":"value2"}' }; fetch('https://www.zohoapis.com/expense/v1/expensereports/submit', options) .then(response => response.json()) .then(response => console.log(response)) .catch(err => console.error(err));
import http.client conn = http.client.HTTPSConnection("www.zohoapis.com") payload = "{\"field1\":\"value1\",\"field2\":\"value2\"}" headers = { 'X-com-zoho-expense-organizationid': "10234695", 'Authorization': "Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f", 'content-type': "application/json" } conn.request("POST", "/expense/v1/expensereports/submit", payload, headers) res = conn.getresponse() data = res.read() print(data.decode("utf-8"))
const http = require("https"); const options = { "method": "POST", "hostname": "www.zohoapis.com", "port": null, "path": "/expense/v1/expensereports/submit", "headers": { "X-com-zoho-expense-organizationid": "10234695", "Authorization": "Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f", "content-type": "application/json" } }; const req = http.request(options, function (res) { const chunks = []; res.on("data", function (chunk) { chunks.push(chunk); }); res.on("end", function () { const body = Buffer.concat(chunks); console.log(body.toString()); }); }); req.write(JSON.stringify({field1: 'value1', field2: 'value2'})); req.end();
curl --request POST \ --url https://www.zohoapis.com/expense/v1/expensereports/submit \ --header 'Authorization: Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f' \ --header 'X-com-zoho-expense-organizationid: 10234695' \ --header 'content-type: application/json' \ --data '{"field1":"value1","field2":"value2"}'

Body Parameters

Click to copy
{ "report_ids": "16367000000081005,16367000000081006", "approver_id": "16367000000073001" }

Response Example

{ "code": 0, "message": "The selected reports have been submitted successfully." }

Approve multiple reports AI Tools

Open in ChatGPT

Open in ChatGPT to ask questions about this page

Open in Claude

Open in Claude to ask questions about this page

Copy as Markdown

Copy this page as markdown to use with AI assistants

View as Markdown

Open this page as markdown in a new tab

Approve multiple submitted reports at once by providing the organization ID and an array of report IDs. All selected reports must currently be in "submitted" status, and the authenticated user must be an authorized approver for each of them. Upon success, all specified reports transition to "approved" status and the respective submitters are notified.
OAuth Scope : ZohoExpense.approval.CREATE

Arguments

report_ids
string
(Required)
Comma-separated list of report IDs to approve (max 200).

Headers

X-com-zoho-expense-organizationid
string
(Required)
ID of the organization

Request Example

Click to copy
parameters_data='{"field1":"value1","field2":"value2"}'; headers_data = Map(); headers_data.put("X-com-zoho-expense-organizationid", "10234695"); headers_data.put("Authorization", "Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f"); response = invokeUrl [ url: "https://www.zohoapis.com/expense/v1/expensereports/approve" type: POST headers: headers_data content-type: application/json parameters: parameters_data connection: <connection_name> ]; info response;
OkHttpClient client = new OkHttpClient(); MediaType mediaType = MediaType.parse("application/json"); RequestBody body = RequestBody.create(mediaType, "{\"field1\":\"value1\",\"field2\":\"value2\"}"); Request request = new Request.Builder() .url("https://www.zohoapis.com/expense/v1/expensereports/approve") .post(body) .addHeader("X-com-zoho-expense-organizationid", "10234695") .addHeader("Authorization", "Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f") .addHeader("content-type", "application/json") .build(); Response response = client.newCall(request).execute();
const options = { method: 'POST', headers: { 'X-com-zoho-expense-organizationid': '10234695', Authorization: 'Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f', 'content-type': 'application/json' }, body: '{"field1":"value1","field2":"value2"}' }; fetch('https://www.zohoapis.com/expense/v1/expensereports/approve', options) .then(response => response.json()) .then(response => console.log(response)) .catch(err => console.error(err));
import http.client conn = http.client.HTTPSConnection("www.zohoapis.com") payload = "{\"field1\":\"value1\",\"field2\":\"value2\"}" headers = { 'X-com-zoho-expense-organizationid': "10234695", 'Authorization': "Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f", 'content-type': "application/json" } conn.request("POST", "/expense/v1/expensereports/approve", payload, headers) res = conn.getresponse() data = res.read() print(data.decode("utf-8"))
const http = require("https"); const options = { "method": "POST", "hostname": "www.zohoapis.com", "port": null, "path": "/expense/v1/expensereports/approve", "headers": { "X-com-zoho-expense-organizationid": "10234695", "Authorization": "Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f", "content-type": "application/json" } }; const req = http.request(options, function (res) { const chunks = []; res.on("data", function (chunk) { chunks.push(chunk); }); res.on("end", function () { const body = Buffer.concat(chunks); console.log(body.toString()); }); }); req.write(JSON.stringify({field1: 'value1', field2: 'value2'})); req.end();
curl --request POST \ --url https://www.zohoapis.com/expense/v1/expensereports/approve \ --header 'Authorization: Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f' \ --header 'X-com-zoho-expense-organizationid: 10234695' \ --header 'content-type: application/json' \ --data '{"field1":"value1","field2":"value2"}'

Body Parameters

Click to copy
{ "report_ids": "16367000000081005,16367000000081006" }

Response Example

{ "code": 0, "message": "The selected reports have been approved successfully." }

Reject multiple reports AI Tools

Open in ChatGPT

Open in ChatGPT to ask questions about this page

Open in Claude

Open in Claude to ask questions about this page

Copy as Markdown

Copy this page as markdown to use with AI assistants

View as Markdown

Open this page as markdown in a new tab

Reject multiple submitted reports in a single request by providing the organization ID and an array of report IDs. The user can include a comment explaining the reason for rejection, which will apply to all the selected reports. All reports must be in "submitted" status and the authenticated user must be an authorized approver. Once rejected, the reports are sent back to their respective submitters for revision.
OAuth Scope : ZohoExpense.approval.CREATE

Arguments

report_ids
string
(Required)
Comma-separated list of report IDs to reject (max 200).
comments
string
Reason applied to every rejected report. Recorded in the audit trail.

Headers

X-com-zoho-expense-organizationid
string
(Required)
ID of the organization

Request Example

Click to copy
parameters_data='{"field1":"value1","field2":"value2"}'; headers_data = Map(); headers_data.put("X-com-zoho-expense-organizationid", "10234695"); headers_data.put("Authorization", "Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f"); response = invokeUrl [ url: "https://www.zohoapis.com/expense/v1/expensereports/reject" type: POST headers: headers_data content-type: application/json parameters: parameters_data connection: <connection_name> ]; info response;
OkHttpClient client = new OkHttpClient(); MediaType mediaType = MediaType.parse("application/json"); RequestBody body = RequestBody.create(mediaType, "{\"field1\":\"value1\",\"field2\":\"value2\"}"); Request request = new Request.Builder() .url("https://www.zohoapis.com/expense/v1/expensereports/reject") .post(body) .addHeader("X-com-zoho-expense-organizationid", "10234695") .addHeader("Authorization", "Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f") .addHeader("content-type", "application/json") .build(); Response response = client.newCall(request).execute();
const options = { method: 'POST', headers: { 'X-com-zoho-expense-organizationid': '10234695', Authorization: 'Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f', 'content-type': 'application/json' }, body: '{"field1":"value1","field2":"value2"}' }; fetch('https://www.zohoapis.com/expense/v1/expensereports/reject', options) .then(response => response.json()) .then(response => console.log(response)) .catch(err => console.error(err));
import http.client conn = http.client.HTTPSConnection("www.zohoapis.com") payload = "{\"field1\":\"value1\",\"field2\":\"value2\"}" headers = { 'X-com-zoho-expense-organizationid': "10234695", 'Authorization': "Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f", 'content-type': "application/json" } conn.request("POST", "/expense/v1/expensereports/reject", payload, headers) res = conn.getresponse() data = res.read() print(data.decode("utf-8"))
const http = require("https"); const options = { "method": "POST", "hostname": "www.zohoapis.com", "port": null, "path": "/expense/v1/expensereports/reject", "headers": { "X-com-zoho-expense-organizationid": "10234695", "Authorization": "Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f", "content-type": "application/json" } }; const req = http.request(options, function (res) { const chunks = []; res.on("data", function (chunk) { chunks.push(chunk); }); res.on("end", function () { const body = Buffer.concat(chunks); console.log(body.toString()); }); }); req.write(JSON.stringify({field1: 'value1', field2: 'value2'})); req.end();
curl --request POST \ --url https://www.zohoapis.com/expense/v1/expensereports/reject \ --header 'Authorization: Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f' \ --header 'X-com-zoho-expense-organizationid: 10234695' \ --header 'content-type: application/json' \ --data '{"field1":"value1","field2":"value2"}'

Body Parameters

Click to copy
{ "report_ids": "16367000000081005,16367000000081006", "comments": "Policy violation - receipts not attached." }

Response Example

{ "code": 0, "message": "The selected reports have been rejected successfully." }

Reimburse multiple reports AI Tools

Open in ChatGPT

Open in ChatGPT to ask questions about this page

Open in Claude

Open in Claude to ask questions about this page

Copy as Markdown

Copy this page as markdown to use with AI assistants

View as Markdown

Open this page as markdown in a new tab

Record reimbursements for multiple approved reports at once by providing the organization ID and an array of report IDs. All selected reports must be in "approved" status and the authenticated user must have reimbursement permissions within the organization. Use the via_online flag to choose the mode. For an offline reimbursement (via_online=false), account_id - the paid-through account from which the amount is paid - is mandatory, while reimbursed_date and reference_number are optional. For an online reimbursement (via_online=true), a payment gateway must be configured for the organization and account_id (the source account linked to the gateway) along with a configured employee bank account for each report are mandatory.
OAuth Scope : ZohoExpense.reimbursement.CREATE

Arguments

report_ids
string
(Required)
Comma-separated list of report IDs to reimburse.
reimbursed_date
date
Date the reimbursement was made (yyyy-mm-dd).
reference_number
string
Optional payment reference recorded with the reimbursement.

Headers

X-com-zoho-expense-organizationid
string
(Required)
ID of the organization

Request Example

Click to copy
parameters_data='{"field1":"value1","field2":"value2"}'; headers_data = Map(); headers_data.put("X-com-zoho-expense-organizationid", "10234695"); headers_data.put("Authorization", "Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f"); response = invokeUrl [ url: "https://www.zohoapis.com/expense/v1/expensereports/reimburse" type: POST headers: headers_data content-type: application/json parameters: parameters_data connection: <connection_name> ]; info response;
OkHttpClient client = new OkHttpClient(); MediaType mediaType = MediaType.parse("application/json"); RequestBody body = RequestBody.create(mediaType, "{\"field1\":\"value1\",\"field2\":\"value2\"}"); Request request = new Request.Builder() .url("https://www.zohoapis.com/expense/v1/expensereports/reimburse") .post(body) .addHeader("X-com-zoho-expense-organizationid", "10234695") .addHeader("Authorization", "Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f") .addHeader("content-type", "application/json") .build(); Response response = client.newCall(request).execute();
const options = { method: 'POST', headers: { 'X-com-zoho-expense-organizationid': '10234695', Authorization: 'Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f', 'content-type': 'application/json' }, body: '{"field1":"value1","field2":"value2"}' }; fetch('https://www.zohoapis.com/expense/v1/expensereports/reimburse', options) .then(response => response.json()) .then(response => console.log(response)) .catch(err => console.error(err));
import http.client conn = http.client.HTTPSConnection("www.zohoapis.com") payload = "{\"field1\":\"value1\",\"field2\":\"value2\"}" headers = { 'X-com-zoho-expense-organizationid': "10234695", 'Authorization': "Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f", 'content-type': "application/json" } conn.request("POST", "/expense/v1/expensereports/reimburse", payload, headers) res = conn.getresponse() data = res.read() print(data.decode("utf-8"))
const http = require("https"); const options = { "method": "POST", "hostname": "www.zohoapis.com", "port": null, "path": "/expense/v1/expensereports/reimburse", "headers": { "X-com-zoho-expense-organizationid": "10234695", "Authorization": "Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f", "content-type": "application/json" } }; const req = http.request(options, function (res) { const chunks = []; res.on("data", function (chunk) { chunks.push(chunk); }); res.on("end", function () { const body = Buffer.concat(chunks); console.log(body.toString()); }); }); req.write(JSON.stringify({field1: 'value1', field2: 'value2'})); req.end();
curl --request POST \ --url https://www.zohoapis.com/expense/v1/expensereports/reimburse \ --header 'Authorization: Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f' \ --header 'X-com-zoho-expense-organizationid: 10234695' \ --header 'content-type: application/json' \ --data '{"field1":"value1","field2":"value2"}'

Body Parameters

Click to copy
{ "report_ids": "16367000000081005,16367000000081006", "reimbursed_date": "2026-05-15", "reference_number": "CHQ-1024" }

Response Example

{ "code": 0, "message": "The selected reports have been reimbursed successfully." }

Archive multiple reports AI Tools

Open in ChatGPT

Open in ChatGPT to ask questions about this page

Open in Claude

Open in Claude to ask questions about this page

Copy as Markdown

Copy this page as markdown to use with AI assistants

View as Markdown

Open this page as markdown in a new tab

Archive multiple reports in a single request by providing the organization ID and an array of report IDs. Archiving moves completed or older reports out of the active view without deleting them, helping users keep their workspace organized. Archived reports can still be accessed and searched but will no longer appear in the default report listing.
OAuth Scope : ZohoExpense.expensereport.CREATE

Arguments

report_ids
string
(Required)
Comma-separated list of report IDs to archive (max 200).

Headers

X-com-zoho-expense-organizationid
string
(Required)
ID of the organization

Request Example

Click to copy
parameters_data='{"field1":"value1","field2":"value2"}'; headers_data = Map(); headers_data.put("X-com-zoho-expense-organizationid", "10234695"); headers_data.put("Authorization", "Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f"); response = invokeUrl [ url: "https://www.zohoapis.com/expense/v1/expensereports/archive" type: POST headers: headers_data content-type: application/json parameters: parameters_data connection: <connection_name> ]; info response;
OkHttpClient client = new OkHttpClient(); MediaType mediaType = MediaType.parse("application/json"); RequestBody body = RequestBody.create(mediaType, "{\"field1\":\"value1\",\"field2\":\"value2\"}"); Request request = new Request.Builder() .url("https://www.zohoapis.com/expense/v1/expensereports/archive") .post(body) .addHeader("X-com-zoho-expense-organizationid", "10234695") .addHeader("Authorization", "Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f") .addHeader("content-type", "application/json") .build(); Response response = client.newCall(request).execute();
const options = { method: 'POST', headers: { 'X-com-zoho-expense-organizationid': '10234695', Authorization: 'Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f', 'content-type': 'application/json' }, body: '{"field1":"value1","field2":"value2"}' }; fetch('https://www.zohoapis.com/expense/v1/expensereports/archive', options) .then(response => response.json()) .then(response => console.log(response)) .catch(err => console.error(err));
import http.client conn = http.client.HTTPSConnection("www.zohoapis.com") payload = "{\"field1\":\"value1\",\"field2\":\"value2\"}" headers = { 'X-com-zoho-expense-organizationid': "10234695", 'Authorization': "Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f", 'content-type': "application/json" } conn.request("POST", "/expense/v1/expensereports/archive", payload, headers) res = conn.getresponse() data = res.read() print(data.decode("utf-8"))
const http = require("https"); const options = { "method": "POST", "hostname": "www.zohoapis.com", "port": null, "path": "/expense/v1/expensereports/archive", "headers": { "X-com-zoho-expense-organizationid": "10234695", "Authorization": "Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f", "content-type": "application/json" } }; const req = http.request(options, function (res) { const chunks = []; res.on("data", function (chunk) { chunks.push(chunk); }); res.on("end", function () { const body = Buffer.concat(chunks); console.log(body.toString()); }); }); req.write(JSON.stringify({field1: 'value1', field2: 'value2'})); req.end();
curl --request POST \ --url https://www.zohoapis.com/expense/v1/expensereports/archive \ --header 'Authorization: Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f' \ --header 'X-com-zoho-expense-organizationid: 10234695' \ --header 'content-type: application/json' \ --data '{"field1":"value1","field2":"value2"}'

Body Parameters

Click to copy
{ "report_ids": "16367000000081005,16367000000081006" }

Response Example

{ "code": 0, "message": "The selected reports have been archived successfully." }

Unarchive multiple reports AI Tools

Open in ChatGPT

Open in ChatGPT to ask questions about this page

Open in Claude

Open in Claude to ask questions about this page

Copy as Markdown

Copy this page as markdown to use with AI assistants

View as Markdown

Open this page as markdown in a new tab

Restore multiple previously archived reports back to the active list by providing the organization ID and an array of report IDs. Once unarchived, the reports will reappear in the default report listing and resume their previous status. This action is useful when an archived report needs further action or review.
OAuth Scope : ZohoExpense.expensereport.CREATE

Arguments

report_ids
string
(Required)
Comma-separated list of report IDs to unarchive (max 200).

Headers

X-com-zoho-expense-organizationid
string
(Required)
ID of the organization

Request Example

Click to copy
parameters_data='{"field1":"value1","field2":"value2"}'; headers_data = Map(); headers_data.put("X-com-zoho-expense-organizationid", "10234695"); headers_data.put("Authorization", "Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f"); response = invokeUrl [ url: "https://www.zohoapis.com/expense/v1/expensereports/unarchive" type: POST headers: headers_data content-type: application/json parameters: parameters_data connection: <connection_name> ]; info response;
OkHttpClient client = new OkHttpClient(); MediaType mediaType = MediaType.parse("application/json"); RequestBody body = RequestBody.create(mediaType, "{\"field1\":\"value1\",\"field2\":\"value2\"}"); Request request = new Request.Builder() .url("https://www.zohoapis.com/expense/v1/expensereports/unarchive") .post(body) .addHeader("X-com-zoho-expense-organizationid", "10234695") .addHeader("Authorization", "Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f") .addHeader("content-type", "application/json") .build(); Response response = client.newCall(request).execute();
const options = { method: 'POST', headers: { 'X-com-zoho-expense-organizationid': '10234695', Authorization: 'Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f', 'content-type': 'application/json' }, body: '{"field1":"value1","field2":"value2"}' }; fetch('https://www.zohoapis.com/expense/v1/expensereports/unarchive', options) .then(response => response.json()) .then(response => console.log(response)) .catch(err => console.error(err));
import http.client conn = http.client.HTTPSConnection("www.zohoapis.com") payload = "{\"field1\":\"value1\",\"field2\":\"value2\"}" headers = { 'X-com-zoho-expense-organizationid': "10234695", 'Authorization': "Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f", 'content-type': "application/json" } conn.request("POST", "/expense/v1/expensereports/unarchive", payload, headers) res = conn.getresponse() data = res.read() print(data.decode("utf-8"))
const http = require("https"); const options = { "method": "POST", "hostname": "www.zohoapis.com", "port": null, "path": "/expense/v1/expensereports/unarchive", "headers": { "X-com-zoho-expense-organizationid": "10234695", "Authorization": "Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f", "content-type": "application/json" } }; const req = http.request(options, function (res) { const chunks = []; res.on("data", function (chunk) { chunks.push(chunk); }); res.on("end", function () { const body = Buffer.concat(chunks); console.log(body.toString()); }); }); req.write(JSON.stringify({field1: 'value1', field2: 'value2'})); req.end();
curl --request POST \ --url https://www.zohoapis.com/expense/v1/expensereports/unarchive \ --header 'Authorization: Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f' \ --header 'X-com-zoho-expense-organizationid: 10234695' \ --header 'content-type: application/json' \ --data '{"field1":"value1","field2":"value2"}'

Body Parameters

Click to copy
{ "report_ids": "16367000000081005,16367000000081006" }

Response Example

{ "code": 0, "message": "The selected reports have been unarchived successfully." }

Forward approval of multiple reports AI Tools

Open in ChatGPT

Open in ChatGPT to ask questions about this page

Open in Claude

Open in Claude to ask questions about this page

Copy as Markdown

Copy this page as markdown to use with AI assistants

View as Markdown

Open this page as markdown in a new tab

Forward the approval of multiple reports to another approver in a single call.
OAuth Scope : ZohoExpense.approval.CREATE

Arguments

report_ids
string
(Required)
Comma-separated list of report IDs to forward (max 200).
approver_id
string
Unique ID for the current approver.
comments
string
Note shown to the next approver for every forwarded report.

Headers

X-com-zoho-expense-organizationid
string
(Required)
ID of the organization

Request Example

Click to copy
parameters_data='{"field1":"value1","field2":"value2"}'; headers_data = Map(); headers_data.put("X-com-zoho-expense-organizationid", "10234695"); headers_data.put("Authorization", "Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f"); response = invokeUrl [ url: "https://www.zohoapis.com/expense/v1/expensereports/forwardapproval" type: POST headers: headers_data content-type: application/json parameters: parameters_data connection: <connection_name> ]; info response;
OkHttpClient client = new OkHttpClient(); MediaType mediaType = MediaType.parse("application/json"); RequestBody body = RequestBody.create(mediaType, "{\"field1\":\"value1\",\"field2\":\"value2\"}"); Request request = new Request.Builder() .url("https://www.zohoapis.com/expense/v1/expensereports/forwardapproval") .post(body) .addHeader("X-com-zoho-expense-organizationid", "10234695") .addHeader("Authorization", "Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f") .addHeader("content-type", "application/json") .build(); Response response = client.newCall(request).execute();
const options = { method: 'POST', headers: { 'X-com-zoho-expense-organizationid': '10234695', Authorization: 'Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f', 'content-type': 'application/json' }, body: '{"field1":"value1","field2":"value2"}' }; fetch('https://www.zohoapis.com/expense/v1/expensereports/forwardapproval', options) .then(response => response.json()) .then(response => console.log(response)) .catch(err => console.error(err));
import http.client conn = http.client.HTTPSConnection("www.zohoapis.com") payload = "{\"field1\":\"value1\",\"field2\":\"value2\"}" headers = { 'X-com-zoho-expense-organizationid': "10234695", 'Authorization': "Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f", 'content-type': "application/json" } conn.request("POST", "/expense/v1/expensereports/forwardapproval", payload, headers) res = conn.getresponse() data = res.read() print(data.decode("utf-8"))
const http = require("https"); const options = { "method": "POST", "hostname": "www.zohoapis.com", "port": null, "path": "/expense/v1/expensereports/forwardapproval", "headers": { "X-com-zoho-expense-organizationid": "10234695", "Authorization": "Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f", "content-type": "application/json" } }; const req = http.request(options, function (res) { const chunks = []; res.on("data", function (chunk) { chunks.push(chunk); }); res.on("end", function () { const body = Buffer.concat(chunks); console.log(body.toString()); }); }); req.write(JSON.stringify({field1: 'value1', field2: 'value2'})); req.end();
curl --request POST \ --url https://www.zohoapis.com/expense/v1/expensereports/forwardapproval \ --header 'Authorization: Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f' \ --header 'X-com-zoho-expense-organizationid: 10234695' \ --header 'content-type: application/json' \ --data '{"field1":"value1","field2":"value2"}'

Body Parameters

Click to copy
{ "report_ids": "16367000000081005,16367000000081006", "approver_id": "16367000000073001", "comments": "Out of office until Friday." }

Response Example

{ "code": 0, "message": "The selected reports have been forwarded successfully." }

Change the status of multiple reports AI Tools

Open in ChatGPT

Open in ChatGPT to ask questions about this page

Open in Claude

Open in Claude to ask questions about this page

Copy as Markdown

Copy this page as markdown to use with AI assistants

View as Markdown

Open this page as markdown in a new tab

Apply a generic status change action to multiple reports in a single call.
OAuth Scope : ZohoExpense.expensereport.CREATE

Arguments

report_ids
string
(Required)
Comma-separated list of report IDs to update (max 30).

Path Parameters

action
string
(Required)
Status action token (lowercase, e.g. submitted, approved).

Headers

X-com-zoho-expense-organizationid
string
(Required)
ID of the organization

Request Example

Click to copy
parameters_data='{"field1":"value1","field2":"value2"}'; headers_data = Map(); headers_data.put("X-com-zoho-expense-organizationid", "10234695"); headers_data.put("Authorization", "Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f"); response = invokeUrl [ url: "https://www.zohoapis.com/expense/v1/expensereports/status/approved" type: POST headers: headers_data content-type: application/json parameters: parameters_data connection: <connection_name> ]; info response;
OkHttpClient client = new OkHttpClient(); MediaType mediaType = MediaType.parse("application/json"); RequestBody body = RequestBody.create(mediaType, "{\"field1\":\"value1\",\"field2\":\"value2\"}"); Request request = new Request.Builder() .url("https://www.zohoapis.com/expense/v1/expensereports/status/approved") .post(body) .addHeader("X-com-zoho-expense-organizationid", "10234695") .addHeader("Authorization", "Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f") .addHeader("content-type", "application/json") .build(); Response response = client.newCall(request).execute();
const options = { method: 'POST', headers: { 'X-com-zoho-expense-organizationid': '10234695', Authorization: 'Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f', 'content-type': 'application/json' }, body: '{"field1":"value1","field2":"value2"}' }; fetch('https://www.zohoapis.com/expense/v1/expensereports/status/approved', options) .then(response => response.json()) .then(response => console.log(response)) .catch(err => console.error(err));
import http.client conn = http.client.HTTPSConnection("www.zohoapis.com") payload = "{\"field1\":\"value1\",\"field2\":\"value2\"}" headers = { 'X-com-zoho-expense-organizationid': "10234695", 'Authorization': "Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f", 'content-type': "application/json" } conn.request("POST", "/expense/v1/expensereports/status/approved", payload, headers) res = conn.getresponse() data = res.read() print(data.decode("utf-8"))
const http = require("https"); const options = { "method": "POST", "hostname": "www.zohoapis.com", "port": null, "path": "/expense/v1/expensereports/status/approved", "headers": { "X-com-zoho-expense-organizationid": "10234695", "Authorization": "Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f", "content-type": "application/json" } }; const req = http.request(options, function (res) { const chunks = []; res.on("data", function (chunk) { chunks.push(chunk); }); res.on("end", function () { const body = Buffer.concat(chunks); console.log(body.toString()); }); }); req.write(JSON.stringify({field1: 'value1', field2: 'value2'})); req.end();
curl --request POST \ --url https://www.zohoapis.com/expense/v1/expensereports/status/approved \ --header 'Authorization: Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f' \ --header 'X-com-zoho-expense-organizationid: 10234695' \ --header 'content-type: application/json' \ --data '{"field1":"value1","field2":"value2"}'

Body Parameters

Click to copy
{ "report_ids": "16367000000081005,16367000000081006" }

Response Example

{ "code": 0, "message": "Status has been updated successfully for the selected reports." }

Reset the substatus of multiple reports AI Tools

Open in ChatGPT

Open in ChatGPT to ask questions about this page

Open in Claude

Open in Claude to ask questions about this page

Copy as Markdown

Copy this page as markdown to use with AI assistants

View as Markdown

Open this page as markdown in a new tab

Reset the substatus field for multiple reports in a single call.
OAuth Scope : ZohoExpense.expensereport.CREATE

Arguments

report_ids
string
(Required)
Comma-separated list of report IDs to reset substatus for (max 30).

Headers

X-com-zoho-expense-organizationid
string
(Required)
ID of the organization

Request Example

Click to copy
parameters_data='{"field1":"value1","field2":"value2"}'; headers_data = Map(); headers_data.put("X-com-zoho-expense-organizationid", "10234695"); headers_data.put("Authorization", "Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f"); response = invokeUrl [ url: "https://www.zohoapis.com/expense/v1/expensereports/substatus/reset" type: POST headers: headers_data content-type: application/json parameters: parameters_data connection: <connection_name> ]; info response;
OkHttpClient client = new OkHttpClient(); MediaType mediaType = MediaType.parse("application/json"); RequestBody body = RequestBody.create(mediaType, "{\"field1\":\"value1\",\"field2\":\"value2\"}"); Request request = new Request.Builder() .url("https://www.zohoapis.com/expense/v1/expensereports/substatus/reset") .post(body) .addHeader("X-com-zoho-expense-organizationid", "10234695") .addHeader("Authorization", "Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f") .addHeader("content-type", "application/json") .build(); Response response = client.newCall(request).execute();
const options = { method: 'POST', headers: { 'X-com-zoho-expense-organizationid': '10234695', Authorization: 'Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f', 'content-type': 'application/json' }, body: '{"field1":"value1","field2":"value2"}' }; fetch('https://www.zohoapis.com/expense/v1/expensereports/substatus/reset', options) .then(response => response.json()) .then(response => console.log(response)) .catch(err => console.error(err));
import http.client conn = http.client.HTTPSConnection("www.zohoapis.com") payload = "{\"field1\":\"value1\",\"field2\":\"value2\"}" headers = { 'X-com-zoho-expense-organizationid': "10234695", 'Authorization': "Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f", 'content-type': "application/json" } conn.request("POST", "/expense/v1/expensereports/substatus/reset", payload, headers) res = conn.getresponse() data = res.read() print(data.decode("utf-8"))
const http = require("https"); const options = { "method": "POST", "hostname": "www.zohoapis.com", "port": null, "path": "/expense/v1/expensereports/substatus/reset", "headers": { "X-com-zoho-expense-organizationid": "10234695", "Authorization": "Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f", "content-type": "application/json" } }; const req = http.request(options, function (res) { const chunks = []; res.on("data", function (chunk) { chunks.push(chunk); }); res.on("end", function () { const body = Buffer.concat(chunks); console.log(body.toString()); }); }); req.write(JSON.stringify({field1: 'value1', field2: 'value2'})); req.end();
curl --request POST \ --url https://www.zohoapis.com/expense/v1/expensereports/substatus/reset \ --header 'Authorization: Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f' \ --header 'X-com-zoho-expense-organizationid: 10234695' \ --header 'content-type: application/json' \ --data '{"field1":"value1","field2":"value2"}'

Body Parameters

Click to copy
{ "report_ids": "16367000000081005,16367000000081006" }

Response Example

{ "code": 0, "message": "Substatus has been reset successfully for the selected reports." }

Bulk update fields of multiple reports AI Tools

Open in ChatGPT

Open in ChatGPT to ask questions about this page

Open in Claude

Open in Claude to ask questions about this page

Copy as Markdown

Copy this page as markdown to use with AI assistants

View as Markdown

Open this page as markdown in a new tab

Apply the same field updates to multiple reports in a single call (mass edit).
OAuth Scope : ZohoExpense.expensereport.UPDATE

Arguments

report_ids
string
(Required)
Comma-separated list of report IDs whose fields should be updated.
fields
object
Map of field name to new value to apply to every listed report.

Headers

X-com-zoho-expense-organizationid
string
(Required)
ID of the organization

Request Example

Click to copy
parameters_data='{"field1":"value1","field2":"value2"}'; headers_data = Map(); headers_data.put("X-com-zoho-expense-organizationid", "10234695"); headers_data.put("Authorization", "Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f"); response = invokeUrl [ url: "https://www.zohoapis.com/expense/v1/expensereports/bulkfieldupdate" type: POST headers: headers_data content-type: application/json parameters: parameters_data connection: <connection_name> ]; info response;
OkHttpClient client = new OkHttpClient(); MediaType mediaType = MediaType.parse("application/json"); RequestBody body = RequestBody.create(mediaType, "{\"field1\":\"value1\",\"field2\":\"value2\"}"); Request request = new Request.Builder() .url("https://www.zohoapis.com/expense/v1/expensereports/bulkfieldupdate") .post(body) .addHeader("X-com-zoho-expense-organizationid", "10234695") .addHeader("Authorization", "Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f") .addHeader("content-type", "application/json") .build(); Response response = client.newCall(request).execute();
const options = { method: 'POST', headers: { 'X-com-zoho-expense-organizationid': '10234695', Authorization: 'Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f', 'content-type': 'application/json' }, body: '{"field1":"value1","field2":"value2"}' }; fetch('https://www.zohoapis.com/expense/v1/expensereports/bulkfieldupdate', options) .then(response => response.json()) .then(response => console.log(response)) .catch(err => console.error(err));
import http.client conn = http.client.HTTPSConnection("www.zohoapis.com") payload = "{\"field1\":\"value1\",\"field2\":\"value2\"}" headers = { 'X-com-zoho-expense-organizationid': "10234695", 'Authorization': "Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f", 'content-type': "application/json" } conn.request("POST", "/expense/v1/expensereports/bulkfieldupdate", payload, headers) res = conn.getresponse() data = res.read() print(data.decode("utf-8"))
const http = require("https"); const options = { "method": "POST", "hostname": "www.zohoapis.com", "port": null, "path": "/expense/v1/expensereports/bulkfieldupdate", "headers": { "X-com-zoho-expense-organizationid": "10234695", "Authorization": "Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f", "content-type": "application/json" } }; const req = http.request(options, function (res) { const chunks = []; res.on("data", function (chunk) { chunks.push(chunk); }); res.on("end", function () { const body = Buffer.concat(chunks); console.log(body.toString()); }); }); req.write(JSON.stringify({field1: 'value1', field2: 'value2'})); req.end();
curl --request POST \ --url https://www.zohoapis.com/expense/v1/expensereports/bulkfieldupdate \ --header 'Authorization: Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f' \ --header 'X-com-zoho-expense-organizationid: 10234695' \ --header 'content-type: application/json' \ --data '{"field1":"value1","field2":"value2"}'

Body Parameters

Click to copy
{ "report_ids": "16367000000081005,16367000000081006", "fields": { "customer_id": "16367000000075081", "project_id": "16367000000076002" } }

Response Example

{ "code": 0, "message": "Field updates have been applied to the selected reports." }