Skip to main content
PUT

Authorizations

Authorization
string
header
required

Bearer authentication header of the form Bearer <token>, where <token> is your auth token.

Path Parameters

expenseId
string
required

The id of the expense to retrieve UUID without dashes (32-character hex string)

Pattern: ^[0-9a-fA-F]{32}$

Query Parameters

forceSave
boolean

When true, saves the report even if non-blocking validation warnings exist; validation errors still abort. Defaults to false.

action
enum<string>

No request body allowed when using action parameter send - will try to perform send in the specified expense, merge - will try to perform merge of data within the specified expenses, connectToOrganization - will connect an expense to an organization, used for multi organization users when connecting mailed in receipts.

Available options:
send,
merge,
connectToOrganization
mergeWith
string

Parameter required to be used when action=merge is passed. This parameter represents the id of loose expense record that is not created based on card transaction, nor belongs to some expense report and it is in one of the statuses [NEW, NORMAL, APPROVAL, REJECTED] UUID without dashes (32-character hex string)

Pattern: ^[0-9a-fA-F]{32}$
version
integer<int64>

Optional stale data check for the actions without a request body (action=send, action=merge, action=connectToOrganization and DELETE). The version of the expense as it was returned when the client loaded it, an integer >= 0. If the expense has been changed since (its current version differs), the request is rejected with 409 CONCURRENT_MODIFICATION and nothing is changed; reload the expense and try again. A value that is not a number is rejected with 400 INVALID_PARAMETER. When omitted, no check is made. For a regular update with a request body, send version in the body instead - this parameter is then ignored.

Required range: x >= 0
mergeWithVersion
integer<int64>

Optional stale data check for action=merge. The version of the expense given in mergeWith as it was returned when the client loaded it, an integer >= 0 (the expense merged from is checked with version). If the expense in mergeWith has been changed since, the merge is rejected with 409 CONCURRENT_MODIFICATION and nothing is changed. A value that is not a number is rejected with 400 INVALID_PARAMETER. When omitted, no check is made of the expense in mergeWith.

Required range: x >= 0

Body

application/json

ExpenseRecord format

version
integer<int64>

Optimistic-lock counter, incremented on every update. On PUT, echo back the value from the last GET/PUT response to detect if the expense was changed by someone else since it was read; a mismatch returns 409. Optional; omit to skip this check. For the actions without a request body (action=send, action=merge, action=connectToOrganization and DELETE), pass it as the version query parameter instead.

organizationId
string

UUID without dashes (32-character hex string)

Pattern: ^[0-9a-fA-F]{32}$
categoryId
string

UUID without dashes (32-character hex string)

Pattern: ^[0-9a-fA-F]{32}$
verification
object

The expense-type-specific payload — receipt details, mileage details, per-diem details, or food-benefit details. Shape selected by the nested type discriminator.

expenseReportId
string

UUID without dashes (32-character hex string)

Pattern: ^[0-9a-fA-F]{32}$

Response

OK

ExpenseRecord format

id
string
read-only
status
enum<string>
read-only
Available options:
NEW,
NORMAL,
APPROVAL,
APPROVED,
REJECTED
processStatus
enum<string>
read-only

Simplified status of the expense record: DRAFT while it is editable, REJECTED when rejected in approval, PROCESSING while in approval or transfer, and PROCESSED once sent or paid. Omitted when it cannot be derived from status.

Available options:
DRAFT,
REJECTED,
PROCESSING,
PROCESSED
personId
string

UUID without dashes (32-character hex string)

Pattern: ^[0-9a-fA-F]{32}$
dateCreated
string
read-only
lastUpdated
string
read-only
version
integer<int64>

Optimistic-lock counter, incremented on every update. On PUT, echo back the value from the last GET/PUT response to detect if the expense was changed by someone else since it was read; a mismatch returns 409. Optional; omit to skip this check. For the actions without a request body (action=send, action=merge, action=connectToOrganization and DELETE), pass it as the version query parameter instead.

expenseDate
string
read-only

Date that the user has selected for the expense. For receipt expenses it is purchase date. For mileages it is travel date and for per diems it is the first travel date.

organizationId
string

UUID without dashes (32-character hex string)

Pattern: ^[0-9a-fA-F]{32}$
categoryId
string

UUID without dashes (32-character hex string)

Pattern: ^[0-9a-fA-F]{32}$
rejectComment
string
read-only
reimbursement
number
read-only
reimbursementCurrency
string
read-only
meta
object
read-only
verification
object

The expense-type-specific payload — receipt details, mileage details, per-diem details, or food-benefit details. Shape selected by the nested type discriminator.

expenseReportId
string

UUID without dashes (32-character hex string)

Pattern: ^[0-9a-fA-F]{32}$