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

Unique identifier of the organization. String in UUID without dashes (32-character hex string) if access is done via values from Findity system otherwise, id of external system can be used

reportId
string
required

The unique identifier of the expense report. String, UUID format (32-character hexadecimal). Required. 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. 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. It is deprecated for plain status changes: send status in a field update (without action) instead, which does the same. It is still the way to return a report to its owner with messageText or returnToUser, and to set voucherNumber, errorText, bookingDate, sentToBookingDate or paidDate on a report that is already in the target status, for example to correct the voucher number of a SENT report or the paid date of a PAID report; a field update rejects these fields when status is unchanged. 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 is deprecated and will be removed in a later release; use DELETE /organizations/{organizationId}/reports/{reportId}/externalvoucher instead, with recipientId as a query parameter instead of in the body. Until then it does the same as that endpoint and needs the same rights to modify reports, but answers 200 with the report. It clears the external voucher reference from the report and from every expense record in it. With recipientId in the request body, and if the report has a send chain, the voucher numbers of that recipient's step are cleared as well and a change log entry is written. A recipient of another organization is answered with 400 and nothing is cleared. 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

Body

application/json

Fields that can be updated on an expense report. status and the fields used together with it (voucherNumber, errorText, bookingDate, sentToBookingDate, paidDate) are applied in a field update and with action=setStatus, and ignored with any other action. 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; in a field update it is optional and moves the report to this status the same way action=setStatus does. It is first compared with the current status: when it is equal it is ignored, whatever the status is, and the fields used together with it are rejected with 400 INVALID_PARAMETER. Ignored with any other action. Accepted values for a change 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 together with a status change.

errorText
string

Error information to store on the report; the previous error status is cleared first. String, unlimited characters. Optional, only used together with a status change.

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 yyyy-MM-dd'T'HH:mm:ss with Z, ±hh:mm or ±hhmm and optional fractions of a second; a value that can't be parsed, such as a date without a time, is not rejected but treated as omitted. Optional, only used together with a status change 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, parsed like bookingDate. Optional, only used together with a status change for the SENT and PAID statuses, and an omitted or unparseable value defaults the same way as for bookingDate.

paidDate
string<date-time>

Paid date to store on the report. String, date-time format, parsed like bookingDate. Optional, only used together with a status change for the PAID status; an omitted or unparseable value defaults to the current time.

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; sending it in a field update is answered with 400 INVALID_PARAMETER. 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; sending it in a field update is answered with 400 INVALID_PARAMETER. 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 the calling user may approve or reject this report, as the current approver or as a report/organization administrator when both the client application and the organization allow report/organization administrators to approve. Never true for the caller's own report unless the caller is the current approver. Only evaluated for a report with a single approval chain that has one active step, no incorrect approval chains and no pending next step approver selection (see currentApproverInfo.approvalChainId); otherwise false (included when 'approvalChain' is in include parameter)

requiresNextStepApproverSelection
boolean

Whether an approver for the next approval step has to be selected before the report can be approved. Only present for reports in status APPROVAL (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[]