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

organizationId
string
required

The unique identifier of the organization. String, UUID format (32-character hexadecimal). Required. UUID without dashes (32-character hex string)

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

"05b8daba9ba14a49846fe77883248cf0"

reportId
string
required

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

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

Query Parameters

action
enum<string>

Action to perform on the expense report instead of a field update. String, enum. Optional. Accepted values: reviewOk, clearTransactions, approve, reject, simulateBilling, sendReminder, setStatus, moveToNextStep, forwardToApprovalOrBooking, deleteExternalVoucherInfo, delete. approve and reject submit an approval decision for the report's approval chain and require a request body holding approvalChainId. approve carries the per record decisions, so partial approvals are supported; reject rejects every expense record of the report unless explicit records are supplied. simulateBilling assigns a generated billing file reference to the report and to its card transactions, sets the due date to tomorrow and renames the report. It requires the adminApiExpenseReports:updateExpenseReport-simulateBilling permission and is intended as a developer and support tool. sendReminder reminds the owner of the report about it and takes an optional message in the request body. It requires the adminApiExpenseReports:updateExpenseReport-sendReminder permission, and only reports that carry an invoice reference can be reminded. setStatus moves the report to the status given in the request body. Changing the status of several reports at once, and moving reports to another recipient, is a separate operation: PUT /organizations/{organizationId}/reports?action=setStatus. deleteExternalVoucherInfo clears the external voucher reference from the report and from every expense record in it. With recipientId in the request body, the voucher numbers of that recipient's step in the send chain are cleared as well and a change log entry is written; without it, only the report and its records are cleared. A recipient of another organization is answered with 400 and nothing is cleared. delete soft-deletes the report: the report and every expense record in it are moved to status DELETED, the report's approval chains are removed and a DELETED change log entry is written. Nothing is removed from the database. Unlike the other actions this one answers 204 with no body, because a deleted report is no longer returned by the read endpoints. It is idempotent - deleting an already deleted report answers 204 as well - and it has no status or report-type restriction, matching what the admin UI allows today. It needs no permission of its own beyond access to the report, the same as reviewOk, clearTransactions, approve, reject and setStatus. moveToNextStep and forwardToApprovalOrBooking advance the report in its send chain. Both are restricted to the developer role and answer 403 for anyone else. Use PUT /organizations/{organizationId}/reports?action=moveToNextStep to advance several reports at once.

Available options:
reviewOk,
clearTransactions,
approve,
reject,
simulateBilling,
sendReminder,
setStatus,
moveToNextStep,
forwardToApprovalOrBooking,
deleteExternalVoucherInfo,
delete

Body

application/json

Fields that can be updated on an expense report. Any other fields in the request body are silently ignored.

name
string

The display name of the expense report. String, maximum 255 characters.

comment
string

Comment on the expense report. String, unlimited characters. When action=approve or action=reject is used, this is instead stored as the comment on the approval decision.

customFields
object[]

Array of custom field values to set on the expense report. Each item must include a fieldDefinitionId and a value. Array of custom field objects.

expenseRecords
object[]

Array of bare expense record objects to include in this report. Exclude a record to to delete it from a report.

status
string

Target lifecycle status of the report, case insensitive. String. Required when action=setStatus, ignored otherwise. Accepted values are NEW, NORMAL, READY_TO_SEND, SENT and PAID; any other value, known lifecycle status or not, is rejected with 400 INVALID_PARAMETER, since the remaining statuses are reached through their own processing. The transition itself is not validated - the report is moved to the given status whatever its current one is, so the caller decides what makes sense.

voucherNumber
string

External voucher number to store on the report and its expense records. String, unlimited characters. Optional, only used with action=setStatus.

errorText
string

Error information to store on the report; the previous error status is cleared first. String, unlimited characters. Optional, only used with action=setStatus.

bookingDate
string<date-time>

Accounting booking date of the report, the date the report is booked on. Stored on the report itself and used when reports are exported and sorted by booking date. String, date-time format. Optional, only used with action=setStatus for the SENT and PAID statuses. When omitted it defaults to the current time: always on a move to SENT, and on a move to PAID only when the report has no booking date yet.

sentToBookingDate
string<date-time>

Date the report was handed over to booking. Stored separately from bookingDate and passed on to the integration in the send chain payload. String, date-time format. Optional, only used with action=setStatus for the SENT and PAID statuses, and defaults the same way as bookingDate.

paidDate
string<date-time>

Paid date to store on the report. String, date-time format. Optional, only used with action=setStatus for the PAID status; defaults to the current time when the status changes.

messageText
string

Message sent to the report owner when the report is returned to the user. String, unlimited characters. Optional, only used with action=setStatus. Supplying it is enough to treat the change as a return to the owner when the target status is NEW or NORMAL, returnToUser does not have to be set as well.

returnToUser
boolean

Marks the status change as a return to the report owner. Boolean. Optional, only used with action=setStatus. Set it to notify the owner for any target status, or when moving to NEW or NORMAL without a messageText. It is redundant when messageText is given together with the NEW or NORMAL status, which already counts as a return.

approvalChainId
string

Id of the approval chain the decision applies to. String, UUID format (32-character hex). Required when action=approve or action=reject, ignored otherwise. Must belong to the report in the path.

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

Expense records to reject. Array of objects, optional. Only used with action=approve or action=reject. Every record of the report that is not listed here is approved, so an omitted or empty list approves the whole report; with action=reject an omitted list rejects every record of the report.

nextStepApproverIds
string[]

Ids of the approvers to use for the next approval step. Array of strings, optional. Only relevant for action=approve when the approval section requires next step approvers to be chosen; the ids must be approver candidates of the next approval step.

Id of an approver. String, UUID format (32-character hex).

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

Response

OK

comment
string
dateCreated
string
read-only
emailRecipients
string
expenseRecords
object[]
id
string
lastUpdated
string
name
string
organizationId
string

UUID without dashes (32-character hex string)

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

UUID without dashes (32-character hex string)

Pattern: ^[0-9a-fA-F]{32}$
previewUrl
string
read-only
reportNumber
string
sent
string
read-only
paid
string<date-time>
read-only

Date when the expense report was paid. ISO-8601 format (e.g., 2024-01-15T10:30:00Z). Read-only.

approved
string<date-time>
read-only

Date when the expense report was approved. ISO-8601 format (e.g., 2024-01-15T10:30:00Z). Read-only.

status
enum<string>
read-only
Available options:
APPROVAL,
APPROVED,
READY_TO_SEND,
BULK_TRANSFER,
ERROR,
NEW,
NORMAL,
ON_HOLD,
PAID,
REJECTED,
SEND,
SENT,
TRANSFER,
TRANSFER_TO_RECIPIENT,
REVIEW
processStatus
enum<string>
read-only
Available options:
DRAFT,
PROCESSING,
PROCESSED,
REJECTED
reimbursement
number
read-only
reimbursementCurrency
string
read-only
type
enum<string>
read-only
Available options:
AUTOMATIC,
MANUAL,
COMPANY_CARD
ownerName
string
firstName
string

First name of the expense report owner

lastName
string

Last name of the expense report owner

adminErrorInformation
string

Error information from admin operations

organizationName
string
organizationNumber
string
organizationLanguage
string
organizationUseNewDimensions
boolean
organizationRequiresAttestation
boolean
organizationUsesPaymentBasis
boolean
organizationReviewType
enum<string>

Review type for the organization. None, before approval, or after approval. The AFTER_SEND value actually means before approval.

Available options:
NONE,
AFTER_SEND,
AFTER_APPROVAL
expenseRecordCount
integer

Number of expense records in this report

totalAmount
number

Total amount of all expense records in the report

userCanModifyReports
boolean
userCanSendReports
boolean
reportGroup
integer
onHoldStatus
object
read-only

On-hold status information

bank
string

Bank information for payment

dueDate
string<date-time>

Payment due date. ISO-8601 format (e.g., 2024-01-15T10:30:00Z).

cardNumber
string

Card number (masked)

invoiceRef
string

Invoice reference

invoiceNumber
string

Invoice number

invoiceDate
string<date-time>

Invoice date. ISO-8601 format (e.g., 2024-01-15T10:30:00Z).

externalVoucherNumber
string

External voucher number from integration

externalVoucherInformation
string

External voucher information

externalVoucherErrorInformation
string

Error information from external voucher system

externalVoucherId
string

External voucher ID

reminderSentToUser
boolean

Whether a reminder has been sent to the user

hasExpenseViolations
boolean

Whether any expense in the report has an unhandled policy violation (duplicate receipt or other)

message
object

The latest direct message of the report, used for the message icon in the report list. Always returned when the report has a message, omitted otherwise. Use the 'meta.messages' include to get the report's messages (on the single-report endpoints only the messages sent to the report owner).

approverReminded
boolean

Whether an approver has been reminded

reminderSentToApprover
boolean
deprecated

Deprecated, use approverReminded. Whether an approver has been reminded

employeeId
string

Employee ID (included when 'employeeId' is in include parameter)

validationErrors
object[]

Validation errors of the report and of its expenses (included when 'validationErrors' is in include parameter). Errors on an expense carry the expenseRecordId of that expense; errors on the report itself have no expenseRecordId.

hasRejectedExpenseRecords
boolean

Whether the report has rejected expense records (included when 'approvalChain' is in include parameter)

hasIncorrectApprovalChains
boolean

Whether the report has incorrect approval chains (included when 'approvalChain' or 'sendChain' is in include parameter)

approvalAllowed
boolean

Whether approval is allowed for this report (included when 'approvalChain' is in include parameter)

currentApproverInfo
object

Information about the current approver (included when 'approvalChain' is in include parameter)

sendChain
object

Send chain information (included when 'sendChain' is in include parameter)

tag
object

Tag information (included when 'tag' is in include parameter)

meta
object

Server-computed metadata for the report. Each property is opt-in through the include parameter.

customFields
object[]