Skip to main content

Expenses

Record and approve expenses, organise them by category and vendor, schedule recurring expenses, turn receipts into expenses, and analyse costs.

Paths are relative to https://api.rushhourapp.com/api/v1. See the API reference overview for how to read each entry.

Truck and office expenses​

MethodPathSummary
GET/ExpensesSearch expenses.
POST/ExpensesAdd expense.
POST/Expenses/multipleAdd multiple expenses.
GET/Expenses/OfficeExpensesGet office expenses.
POST/Expenses/OfficeExpensesAdd or update office expenses.
POST/Expenses/RemoveExpenseDelete expense.
GET/Expenses/StatsGet expenses stats.

GET /Expenses​

Search expenses.

Required access: the Expenses tab - view existing data permission.

Parameters

NameInTypeRequiredDescription
typequeryinteger (int32)NoOne of: 0 (Trucks), 1 (DriverRoutePayout), 2 (OutsourceCompanyRoutePayout), 3 (Office).

Also accepts the shared list parameters.

Response: envelope; data is ExpensePagedList.

POST /Expenses​

Add expense.

Required access: the Expenses tab - create/edit/delete data permission.

Request body: Expense (JSON).

Response: envelope; data is Expense.

POST /Expenses/multiple​

Add multiple expenses.

Required access: the Expenses tab - create/edit/delete data permission.

Request body: array of Expense (JSON).

Response: envelope; data has no documented shape.

GET /Expenses/OfficeExpenses​

Get office expenses.

Required access: the Expenses tab - view existing data permission.

Parameters

NameInTypeRequiredDescription
datequerystring (date-time)No

Response: envelope; data is array of Expense.

POST /Expenses/OfficeExpenses​

Add or update office expenses.

Required access: the Expenses tab - create/edit/delete data permission.

Request body: array of Expense (JSON).

Response: envelope; data has no documented shape.

POST /Expenses/RemoveExpense​

Delete expense.

Required access: the Expenses tab - create/edit/delete data permission.

Parameters

NameInTypeRequiredDescription
datequerystring (date-time)No

Request body: Expense (JSON).

Response: envelope; data has no documented shape.

GET /Expenses/Stats​

Get expenses stats.

Required access: the Expenses tab - view existing data permission.

Parameters

NameInTypeRequiredDescription
endDatequerystring (date-time)No
startDatequerystring (date-time)No
typesqueryarray of integer (int32)NoOne of: 0 (Trucks), 1 (DriverRoutePayout), 2 (OutsourceCompanyRoutePayout), 3 (Office).

Response: envelope; data is ExpensesByTypeStats.

Expense transactions​

MethodPathSummary
GET/ExpenseLedgerSearch expenses and get one page of results, with totals for all matching expenses: amounts by currency, the number of expenses and the number in each approval status.
POST/ExpenseLedgerRecord an expense.
GET/ExpenseLedger/{id}Get an expense.
PUT/ExpenseLedger/{id}Update an expense.
DELETE/ExpenseLedger/{id}Delete an expense. It can be restored later.
POST/ExpenseLedger/{id}/approveApprove an expense.
POST/ExpenseLedger/{id}/assign-orderAttaches the cost to an order, or detaches it.
POST/ExpenseLedger/{id}/rejectReject an expense with a reason.
POST/ExpenseLedger/{id}/restoreRestore a deleted expense.
POST/ExpenseLedger/{id}/submitSubmit an expense for approval.
POST/ExpenseLedger/bulk/approveApprove several expenses at once. Each expense gets its own result, and one that fails does not stop the others.
POST/ExpenseLedger/bulk/categorizeMove several expenses to one category.
POST/ExpenseLedger/bulk/rejectReject several expenses at once with one shared reason. Each expense gets its own result.

GET /ExpenseLedger​

Search expenses and get one page of results, with totals for all matching expenses: amounts by currency, the number of expenses and the number in each approval status.

Required access: the Expenses tab - view existing data permission.

Parameters

NameInTypeRequiredDescription
ApprovalStatusesqueryarray of stringNoOne of: Approved, Draft, Submitted, Rejected.
CategoryIdsqueryarray of integer (int32)No
DriverIdsqueryarray of integer (int32)No
EndDatequerystring (date-time)No
ExcludeMeasurementRowsquerybooleanNo
FuelTypesqueryarray of stringNoOne of: Diesel, DieselExhaustFluid, ReeferDiesel, Gasoline, Cng, Lng, Propane, Electric, Biodiesel, Other.
HasDriverquerybooleanNo
HasReceiptquerybooleanNo
IncludeDeletedquerybooleanNo
IsBillableToOrderquerybooleanNo
IsCapitalquerybooleanNo
ItemsPerPagequeryinteger (int32)No
JurisdictionStatequerystringNo
MaxAmountquerynumber (double)No
MinAmountquerynumber (double)No
OrderIdqueryinteger (int32)No
Pagequeryinteger (int32)No
PaymentMethodsqueryarray of stringNoOne of: Unspecified, Cash, CreditCard, FuelCard, Check, Ach, Comchek, DriverAdvance, Other.
RebillStatusesqueryarray of stringNoOne of: NotBillable, Pending, Invoiced, Absorbed.
SearchTermquerystringNo
SortByquerystringNo
SortDirectionqueryinteger (int32)NoOne of: 0 (Ascending), 1 (Descending).
Sourcesqueryarray of stringNoOne of: MonthlyGrid, Manual, Mobile, Receipt, FuelCardImport, Recurring, Api, Import.
StartDatequerystring (date-time)No
Subtypesqueryarray of integer (int32)NoOne of: 0 (TruckGas), 1 (TruckInsurance), 2 (TruckMaintenance), 3 (TruckPayment), 4 (TruckTrailer), 5 (TruckLicense), 6 (TruckTool), 7 (TruckOther), 8 (TruckMiles), 9 (OdometerStart), 10 (OdometerEnd), 100 (OfficeGPS), 101 (OfficeInternet), 102 (OfficeOther).
TruckIdsqueryarray of integer (int32)No
Typesqueryarray of integer (int32)NoOne of: 0 (Trucks), 1 (DriverRoutePayout), 2 (OutsourceCompanyRoutePayout), 3 (Office).
UnattributedOnlyquerybooleanNo
VendorIdsqueryarray of integer (int32)No

Response: envelope; data is ExpenseSearchResultDto.

POST /ExpenseLedger​

Record an expense.

Required access: the Expenses tab - create/edit/delete data permission.

Request body: ExpenseDto (JSON).

Response: envelope; data is ExpenseDto.

GET /ExpenseLedger/{id}​

Get an expense.

Required access: the Expenses tab - view existing data permission.

Parameters

NameInTypeRequiredDescription
idpathinteger (int32)Yes

Response: envelope; data is ExpenseDto.

PUT /ExpenseLedger/{id}​

Update an expense.

Required access: the Expenses tab - create/edit/delete data permission.

Parameters

NameInTypeRequiredDescription
idpathinteger (int32)Yes

Request body: ExpenseDto (JSON).

Response: envelope; data is ExpenseDto.

DELETE /ExpenseLedger/{id}​

Delete an expense. It can be restored later.

Required access: the Expenses tab - create/edit/delete data permission.

Parameters

NameInTypeRequiredDescription
idpathinteger (int32)Yes

Response: envelope; data has no documented shape.

POST /ExpenseLedger/{id}/approve​

Approve an expense.

Required access: the Expenses tab - create/edit/delete data permission.

Parameters

NameInTypeRequiredDescription
idpathinteger (int32)Yes

Response: envelope; data is ExpenseDto.

POST /ExpenseLedger/{id}/assign-order​

Attaches the cost to an order, or detaches it.

Required access: the Expenses tab - create/edit/delete data permission.

Parameters

NameInTypeRequiredDescription
idpathinteger (int32)Yes

Request body: ExpenseAssignOrderDto (JSON).

Response: envelope; data is ExpenseDto.

POST /ExpenseLedger/{id}/reject​

Reject an expense with a reason.

Required access: the Expenses tab - create/edit/delete data permission.

Parameters

NameInTypeRequiredDescription
idpathinteger (int32)Yes

Request body: ExpenseRejectDto (JSON).

Response: envelope; data is ExpenseDto.

POST /ExpenseLedger/{id}/restore​

Restore a deleted expense.

Required access: the Expenses tab - create/edit/delete data permission.

Parameters

NameInTypeRequiredDescription
idpathinteger (int32)Yes

Response: envelope; data has no documented shape.

POST /ExpenseLedger/{id}/submit​

Submit an expense for approval.

Required access: the Expenses tab - create/edit/delete data permission.

Parameters

NameInTypeRequiredDescription
idpathinteger (int32)Yes

Response: envelope; data is ExpenseDto.

POST /ExpenseLedger/bulk/approve​

Approve several expenses at once. Each expense gets its own result, and one that fails does not stop the others.

Required access: the Expenses tab - create/edit/delete data permission.

Request body: ExpenseBulkActionDto (JSON).

Response: envelope; data is ExpenseBulkResultDto.

POST /ExpenseLedger/bulk/categorize​

Move several expenses to one category.

Required access: the Expenses tab - create/edit/delete data permission.

Request body: ExpenseBulkActionDto (JSON).

Response: envelope; data is ExpenseBulkResultDto.

POST /ExpenseLedger/bulk/reject​

Reject several expenses at once with one shared reason. Each expense gets its own result.

Required access: the Expenses tab - create/edit/delete data permission.

Request body: ExpenseBulkActionDto (JSON).

Response: envelope; data is ExpenseBulkResultDto.

Expense categories​

MethodPathSummary
GET/ExpenseCategoriesList expense categories.
POST/ExpenseCategoriesCreate or update an expense category.
DELETE/ExpenseCategories/{id}Permanently delete a category your company created. Built-in categories and categories used by an expense or a recurring expense cannot be deleted; deactivate them instead.
PATCH/ExpenseCategories/{id}/deactivateDeactivate an expense category without changing past expenses.
POST/ExpenseCategories/seedAdd the default trucking expense categories if your company has no categories yet, and return the active categories.

GET /ExpenseCategories​

List expense categories.

Required access: the Expenses tab - view existing data permission.

Parameters

NameInTypeRequiredDescription
includeInactivequerybooleanNoDefault: false.

Response: envelope; data is array of ExpenseCategoryDto.

POST /ExpenseCategories​

Create or update an expense category.

Required access: the Expenses tab - create/edit/delete data permission.

Request body: ExpenseCategoryDto (JSON).

Response: envelope; data is ExpenseCategoryDto.

DELETE /ExpenseCategories/{id}​

Permanently delete a category your company created. Built-in categories and categories used by an expense or a recurring expense cannot be deleted; deactivate them instead.

Required access: the Expenses tab - create/edit/delete data permission.

Parameters

NameInTypeRequiredDescription
idpathinteger (int32)Yes

Response: envelope; data has no documented shape.

PATCH /ExpenseCategories/{id}/deactivate​

Deactivate an expense category without changing past expenses.

Required access: the Expenses tab - create/edit/delete data permission.

Parameters

NameInTypeRequiredDescription
idpathinteger (int32)Yes

Response: envelope; data has no documented shape.

POST /ExpenseCategories/seed​

Add the default trucking expense categories if your company has no categories yet, and return the active categories.

Required access: the Expenses tab - create/edit/delete data permission.

Response: envelope; data is array of ExpenseCategoryDto.

Expense vendors​

MethodPathSummary
GET/ExpenseVendorsList vendors.
POST/ExpenseVendorsCreate or update a vendor.
DELETE/ExpenseVendors/{id}Permanently delete a vendor that no expense, deleted expense or recurring expense uses; deactivate a vendor that is in use instead.
PATCH/ExpenseVendors/{id}/deactivateRetires a payee without touching history.
GET/ExpenseVendors/lookupList active vendors in a short form, for selection lists.
GET/ExpenseVendors/spend-leaderboardVendors ranked by total spend in the window, for spend concentration and 1099 prep.

GET /ExpenseVendors​

List vendors.

Required access: the Expenses tab - view existing data permission.

Parameters

NameInTypeRequiredDescription
includeInactivequerybooleanNoDefault: false.

Also accepts the shared list parameters.

Response: envelope; data is ExpenseVendorDtoPagedList.

POST /ExpenseVendors​

Create or update a vendor.

Required access: the Expenses tab - create/edit/delete data permission.

Request body: ExpenseVendorDto (JSON).

Response: envelope; data is ExpenseVendorDto.

DELETE /ExpenseVendors/{id}​

Permanently delete a vendor that no expense, deleted expense or recurring expense uses; deactivate a vendor that is in use instead.

Required access: the Expenses tab - create/edit/delete data permission.

Parameters

NameInTypeRequiredDescription
idpathinteger (int32)Yes

Response: envelope; data has no documented shape.

PATCH /ExpenseVendors/{id}/deactivate​

Retires a payee without touching history.

Required access: the Expenses tab - create/edit/delete data permission.

Parameters

NameInTypeRequiredDescription
idpathinteger (int32)Yes

Response: envelope; data has no documented shape.

GET /ExpenseVendors/lookup​

List active vendors in a short form, for selection lists.

Required access: the Expenses tab - view existing data permission.

Response: envelope; data is array of ExpenseVendorDto.

GET /ExpenseVendors/spend-leaderboard​

Vendors ranked by total spend in the window, for spend concentration and 1099 prep.

Required access: the Expenses tab - view existing data permission.

Parameters

NameInTypeRequiredDescription
endDatequerystring (date-time)No
startDatequerystring (date-time)No
topqueryinteger (int32)NoDefault: 20.

Response: envelope; data is array of ExpenseVendorDto.

Recurring expenses​

MethodPathSummary
GET/ExpenseRecurringList recurring expense schedules.
POST/ExpenseRecurringCreate or replace a recurring expense schedule.
DELETE/ExpenseRecurring/{id}Removes the schedule.
PATCH/ExpenseRecurring/{id}/deactivateStops a schedule posting without destroying it (truck sold, policy lapsed, subscription cancelled).
POST/ExpenseRecurring/{id}/run-nowPosts the schedule's outstanding occurrence(s) immediately.
GET/ExpenseRecurring/committed-spendMonth-by-month committed spend projected from the active schedules, writing nothing.

GET /ExpenseRecurring​

List recurring expense schedules.

Required access: the Expenses tab - view existing data permission.

Parameters

NameInTypeRequiredDescription
includeInactivequerybooleanNoDefault: false.

Response: envelope; data is array of ExpenseRecurringScheduleDto.

POST /ExpenseRecurring​

Create or replace a recurring expense schedule.

Required access: the Expenses tab - create/edit/delete data permission.

Request body: ExpenseRecurringScheduleDto (JSON).

Response: envelope; data is ExpenseRecurringScheduleDto.

DELETE /ExpenseRecurring/{id}​

Removes the schedule.

Required access: the Expenses tab - create/edit/delete data permission.

Parameters

NameInTypeRequiredDescription
idpathinteger (int32)Yes

Response: envelope; data has no documented shape.

PATCH /ExpenseRecurring/{id}/deactivate​

Stops a schedule posting without destroying it (truck sold, policy lapsed, subscription cancelled).

Required access: the Expenses tab - create/edit/delete data permission.

Parameters

NameInTypeRequiredDescription
idpathinteger (int32)Yes

Response: envelope; data has no documented shape.

POST /ExpenseRecurring/{id}/run-now​

Posts the schedule's outstanding occurrence(s) immediately.

Required access: the Expenses tab - create/edit/delete data permission.

Parameters

NameInTypeRequiredDescription
idpathinteger (int32)Yes

Response: envelope; data is ExpenseRecurringRunResultDto.

GET /ExpenseRecurring/committed-spend​

Month-by-month committed spend projected from the active schedules, writing nothing.

Required access: the Expenses tab - view existing data permission.

Parameters

NameInTypeRequiredDescription
fromquerystring (date-time)No
toquerystring (date-time)No

Response: envelope; data is ExpenseCommittedSpendDto.

Receipts​

MethodPathSummary
POST/ExpenseReceipts/confirmCreate an expense from reviewed receipt details.
POST/ExpenseReceipts/extract/{documentId}Runs AI extraction over an already-uploaded receipt document and returns the proposed fields.

POST /ExpenseReceipts/confirm​

Create an expense from reviewed receipt details.

Required access: the Expenses tab - create/edit/delete data permission.

Request body: ReceiptExpenseConfirmRequest (JSON).

Response: envelope; data is ReceiptExpenseDraftDto.

POST /ExpenseReceipts/extract/{documentId}​

Runs AI extraction over an already-uploaded receipt document and returns the proposed fields.

Required access: the Expenses tab - view existing data permission.

Parameters

NameInTypeRequiredDescription
documentIdpathinteger (int32)Yes

Response: envelope; data is ReceiptExtractionResult.

Expense analytics​

MethodPathSummary
GET/ExpenseAnalytics/benchmarkGet industry cost-per-mile benchmark figures.
GET/ExpenseAnalytics/by-truckPer-truck cost lines for one date range.
GET/ExpenseAnalytics/category-trendGet monthly totals for one expense category.
GET/ExpenseAnalytics/summaryGet total expense spend and its breakdown for a date range.
GET/ExpenseAnalytics/trendGet monthly expense totals for recent months.
GET/ExpenseAnalytics/truck/{truckId}Get the expense breakdown for one truck.

GET /ExpenseAnalytics/benchmark​

Get industry cost-per-mile benchmark figures.

Required access: the Expenses tab - view existing data permission.

Response: envelope; data is ExpenseBenchmarkDto.

GET /ExpenseAnalytics/by-truck​

Per-truck cost lines for one date range.

Required access: the Expenses tab - view existing data permission.

Parameters

NameInTypeRequiredDescription
endDatequerystring (date-time)No
startDatequerystring (date-time)No

Response: envelope; data is array of ExpenseByTruckDto.

GET /ExpenseAnalytics/category-trend​

Get monthly totals for one expense category.

Required access: the Expenses tab - view existing data permission.

Parameters

NameInTypeRequiredDescription
categoryIdqueryinteger (int32)No
monthsqueryinteger (int32)NoDefault: 12.

Response: envelope; data is ExpenseCategoryTrendDto.

GET /ExpenseAnalytics/summary​

Get total expense spend and its breakdown for a date range.

Required access: the Expenses tab - view existing data permission.

Parameters

NameInTypeRequiredDescription
endDatequerystring (date-time)No
startDatequerystring (date-time)No

Response: envelope; data is ExpenseAnalyticsSummaryDto.

GET /ExpenseAnalytics/trend​

Get monthly expense totals for recent months.

Required access: the Expenses tab - view existing data permission.

Parameters

NameInTypeRequiredDescription
monthsqueryinteger (int32)NoDefault: 12.

Response: envelope; data is array of ExpenseMonthlyTrendPointDto.

GET /ExpenseAnalytics/truck/{truckId}​

Get the expense breakdown for one truck.

Required access: the Expenses tab - view existing data permission.

Parameters

NameInTypeRequiredDescription
truckIdpathinteger (int32)Yes
endDatequerystring (date-time)No
monthsqueryinteger (int32)NoDefault: 0.
startDatequerystring (date-time)No

Response: envelope; data is ExpenseTruckDetailDto.